我的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'
)