我的django表包含一个包含逗号分隔字符串的字段。
class RawData(TimeStampModelMixin):
id = models.UUIDField(primary_key=True)
media = models.TextField()媒体专栏将包含“多媒体、电视”、“多媒体、电视台”等价值观。我需要过滤Rawdata表行,以便媒体列包含“TV”或“多媒体”。__icontains没有提供准确的结果。如果我做了
Rawdata.objects.filter(media__contains='TV')然后,它将返回‘多媒体,电视’,‘多媒体,电视台’行。但我只需要“多媒体,电视”那一排。
有任何方法可以通过queryset API来实现这一点吗?
发布于 2022-09-22 12:54:39
正如Hedde所建议的,最好创建像MediaType这样的模型并设置适当的关系:
class MediaType(models.Model):
name = models.TextField()
class RawData(TimeStampModelMixin):
id = models.UUIDField(primary_key=True)
media = models.ManyToManyField(MediaType)然后,您将确信,寻找特定的类型,您不会被错误地与一些类似的类型。
编辑:由于上述解决方案在这种特殊情况下是不可能的,因此有一种使用Q对象的替代方案(符号|表示or):
from django.db.models import Q
Rawdata.objects.filter(Q(media__contains='TV,') | Q(media__endswith='TV'))正如我正确理解的那样,'TV'在media字段中的每一种情况都必须位于字符串的末尾或后面直接加上逗号。
发布于 2022-09-22 15:49:58
这可能不是最好的答案。但是看到你所拥有的确切需求也许可以用你所拥有的数据来完成这项工作。
Rawdata.objects.filter(
media__startswith='Multimedia',
media__endswith='TV'
)https://stackoverflow.com/questions/73814628
复制相似问题