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 模板中的日期过滤列表

使用 Django 根据用户选择的另一个对象属性的值来过滤属性的对象值

如何过滤复杂对象的列表,以便如果两个具有字段值,我会根据条件删除一个

Django:遍历模板中的过滤列表

如何根据同一对象内给定的键值过滤对象

使用 Java Stream 根据第二个列表中的值过滤列表