首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Queryset滤波器

Django Queryset滤波器
EN

Stack Overflow用户
提问于 2022-09-22 12:27:11
回答 2查看 76关注 0票数 0

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

代码语言:javascript
复制
class RawData(TimeStampModelMixin):
       id = models.UUIDField(primary_key=True)
       media = models.TextField()

媒体专栏将包含“多媒体、电视”、“多媒体、电视台”等价值观。我需要过滤Rawdata表行,以便媒体列包含“TV”或“多媒体”。__icontains没有提供准确的结果。如果我做了

代码语言:javascript
复制
Rawdata.objects.filter(media__contains='TV')

然后,它将返回‘多媒体,电视’,‘多媒体,电视台’行。但我只需要“多媒体,电视”那一排。

有任何方法可以通过queryset API来实现这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2022-09-22 12:54:39

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

代码语言:javascript
复制
class MediaType(models.Model):
       name = models.TextField()

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

然后,您将确信,寻找特定的类型,您不会被错误地与一些类似的类型。

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

代码语言:javascript
复制
from django.db.models import Q
Rawdata.objects.filter(Q(media__contains='TV,') | Q(media__endswith='TV'))

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

票数 1
EN

Stack Overflow用户

发布于 2022-09-22 15:49:58

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

代码语言:javascript
复制
Rawdata.objects.filter(
    media__startswith='Multimedia',
    media__endswith='TV'
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73814628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档