Django Queryset filter



我的django表包含一个包含逗号分隔字符串的字段。

class RawData(TimeStampModelMixin):
id = models.UUIDField(primary_key=True)
media = models.TextField()

media列将包含"Multimedia,TV"、"多媒体,TV Station"等值。我需要过滤Rawdata表行,使媒体列包含"电视"或"多媒体"__图标无法提供准确的结果。如果我做

Rawdata.objects.filter(media__contains='TV')

则它将返回"多媒体,电视"one_answers"多媒体,TV电台"两行。但我只需要"多媒体,电视"一行。

有没有什么方法可以通过queryset API实现这一点?

正如Hedde所建议的,最好创建类似MediaType的模型,并设置适当的关系:

class MediaType(models.Model):
name = models.TextField()
class RawData(TimeStampModelMixin):
id = models.UUIDField(primary_key=True)
media = models.ManyToManyField(MediaType)

然后你会确信,在寻找特定类型时,你不会被一些类似的类型所误。

EDIT:由于上述解决方案在这种特殊情况下是不可能的,因此有一个Q对象的替代方案(符号|表示or(:

from django.db.models import Q
Rawdata.objects.filter(Q(media__contains='TV,') | Q(media__endswith='TV'))

正如我正确理解的那样,在'TV'位于media字段内的每种情况下,它都必须位于字符串的末尾或后面直接跟一个逗号。

这可能不是最好的答案。但看到你的确切需求,也许可以利用你所掌握的数据来完成这项工作。

Rawdata.objects.filter(
media__startswith='Multimedia',
media__endswith='TV'
)

最新更新