【问题标题】:return a splitted long sting in a table field in django queryset在 django 查询集中的表字段中返回拆分的长字符串
【发布时间】:2021-01-17 23:40:33
【问题描述】:

我使用mySQL 作为我的 django 项目的数据库。此数据库中的一个表字段具有由, 分隔的文本值,例如:

tags = "Django, MySql, C, C++, Python, Cython"

我在过滤查询集时需要检查上述字段中是否有我想要的字符串:

这是我的查询:

my_tag = "C"
posts = Post.objects.filter(tags__icontains=my_tag).order_by('-date_created')

上面的查询也返回Cython,但我只期望C,这是因为标签文本没有被,分割。如何在文本中找到刺痛,在常规 python 中有 str.split(',')regex 但是在 django 我不知道!

【问题讨论】:

  • 使用FIND_IN_SET(tag, tags) 作为过滤器。
  • 你的意思是像Post.objects.filter(FIND_IN_SET(my_tag, tags)).order_by('-date_created')
  • 在 SQL 中是正确的,但我不知道这在 django 中是什么样子的...测试。
  • 应该类似于Post.objects.extra(where=['FIND_IN_SET(my_tag, tags)']).order_by('-date_created'),但仍然无法正常工作。
  • 你能说ORDER BY x DESC而不是ORDER BY -x吗?

标签: mysql django regex django-queryset


【解决方案1】:

如果 tags = "Django, MySql, C, C++, Python, Cython" 是纯文本比如 (models.CharField(max_length=200)) 你应该可以使用 python 找到它:

newtags = tags.split(',')
' C' in newtags

如果标签与单独的模型相关,您应该能够使用“tags__iexact”查询它

【讨论】:

    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多