如何在Django ORM中按标签列表过滤字符

时间:2019-02-04 17:57:54

标签: python django django-models

使用标签列表过滤CharField的首选方法是什么? 在数据库中,我有这样的东西:

体裁=“某物,苹果,something_else,something_else2,橙,葡萄,等等。”

我尝试使用__in运算符什么也没出现

elem = list(Elements.objects.filter(genres__in=['apple','orange','grape']))

3 个答案:

答案 0 :(得分:1)

您可以尝试此查询

elem = list(Elements.objects.filter(Q(genres__icontains="apple") | Q(genres__icontains="orange") | Q(genres__icontains="grape")))

但是我认为对于标签来说,这是一个更好的解决方案Django Filtering A Blog Based on Tags

答案 1 :(得分:0)

我能够做到以下几点:

from django.db.models import Q
from functools import reduce
from operator import and_

tag_list = ['apple', 'orange', 'grape']

query = reduce(and_, (Q(genres__icontains=tag) for tag in tag_list))
elem = list(Elements.objects.filter(query))

您还可以使用or_运算符,请参见:

How to dynamically compose an OR query filter in Django?'

答案 2 :(得分:-1)

您可能想使用Q查找。 https://docs.djangoproject.com/en/2.1/topics/db/queries/#complex-lookups-with-q-objects

from django.db.models import Q

elem = Elements.objects.filter(Q(genres__icontains="apple") | Q(genres__icontains="orange") | Q(genres__icontains="grapes"))