首页 > 解决方案 > django 使用 fieldname__contains 时如何使字段名成为变量?

问题描述

query_dict = {'server_name': 'mysql', 'type': linux}

class ServerInfo(db.models):
    server_name = models.CharField(max_length=255)
    type = models.CharField(max_length=20)

from django.db.models import Q

q = Q()

for k, v in query_dict.items():
    q.add(Q(k__icontains=v), Q.AND)

这行不通,我怎么能用上面 k 之类的变量替换字段名称?

我的英语不好,对不起。

标签: pythondjango

解决方案


您可以使用 and 构建字典,key__contains并使用语法value将内容解包到Q对象调用中。**IE,

>>> for k, v in query_dict.items():
...     kwargs = {f'{k}_contains': v} # or use kwargs = {'%s_contains' % k: v} if the python version less than 3.6
...     q.add(Q(**kwargs), Q.AND)

推荐阅读