循环修改Django的ORM查询

时间:2019-07-27 15:03:33

标签: django python-3.x django-models

G'day 我在Django中尝试修改/扩展查询。假设我在下面有这样的查询:

query_set = Managers.objects.select_related('managers_contacts').all()

现在,我想使用Python的循环遍历一个看起来像是的字典:{'continent': 'North America', 'country': '', 'city': ''}如果某些键不是空,则查询集应扩展为:。{{1} } 我现在如何构建循环,但是有一个问题是如何向现有查询集添加.filter()对象?使用课堂?您有什么建议吗?最后,我想得到

filter(managers_addresses__some_field='')

1 个答案:

答案 0 :(得分:0)

您可以使用**语法从dict解压缩参数。 因此,您只需要创建新的字典并用正确的键名填充它即可:

# Python 3.6 or above
kwargs = {f"managers_addresses__{key}": value for key, value in some_dict.items() if value}
queryset = queryset.filter(**kwargs)

# Python 3.5 or lower
kwargs = {"managers_addresses__{}".format(key): value for key, value in some_dict.items() if value}
queryset = queryset.filter(**kwargs)