Django 根据列表值过滤对象
Posted
技术标签:
【中文标题】Django 根据列表值过滤对象【英文标题】:Django filter objects based on list values 【发布时间】:2018-11-07 13:27:14 【问题描述】:我的模式中有一个名为technology
的listTextField。如果technology
字段中存在每个数组值,我想根据数组过滤对象。
tech = ['a','b',....] #dynamic list
mentors_list = Mentor.objects.filter(
**"technology__contains" : value for value in tech) #this doesn't work
导师班有(在其他领域):
class Mentor(Meta):
technology = ListTextField(
base_field=models.CharField(max_length=20),
size=10, max_length=(10 * 11))
基本上我想要mentor_list
中的所有对象,其technology
字段必须包含来自tech
数组的所有值(但可能包含一些额外的值)。
【问题讨论】:
【参考方案1】:从documentation
,您可以将Q
对象与&
链接起来,以检查ListTextField
中包含的多个条目。
from functools import reduce
technologies = ['a','b'] # your dynamic list
queries = [Q(technology__contains=technology) for technology in technologies]
query = reduce(lambda x, y: x & y, queries)
mentors_list = Mentor.objects.filter(query)
参考:How to dynamically compose an OR query filter in Django?
【讨论】:
很高兴为您提供帮助。 :)以上是关于Django 根据列表值过滤对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 Django 根据用户选择的另一个对象属性的值来过滤属性的对象值