【问题标题】:Django query for column value search?Django查询列值搜索?
【发布时间】:2022-07-22 00:52:37
【问题描述】:

对此的 Django 查询是什么?

数据库数据-

col1     |    Col2
-------------------------
sahil1   | Cat 1.2.3
sahil2   | 1.2.3-XY2
sahil3   | 9.8.7,1.2.3,11.12.13
sahil4   | 1.2.3
sahil5   | 9.8.4,1.2.3-XY2,9.8.7
sahil6   | Cat 1.2.3,9.8.2,1.2.3

我只需要包含“1.2.3”值而不是 - (“Cat 1.2.3”或“1.2.3-XY2”或任何此类值)的记录。并且模式“1.2.3”可以在列中列值也可以有逗号分隔值的任何位置。

期望的结果 -

col1     |    Col2
-------------------------
sahil3   | 9.8.7,1.2.3,11.12.13
sahil4   | 1.2.3
sahil6   | Cat 1.2.3,9.8.2,1.2.3

当我执行下面的 Django 查询时 -

col2_count = TableName.objects.filter(col2__contains="1.2.3")

获取所有记录,但我只需要包含“1.2.3”值而不是 - (“Cat 1.2.3”或“1.2.3-XY2”或任何此类值)的记录。

如何在 Django 中实现这一点?

【问题讨论】:

    标签: python django postgresql django-models django-queryset


    【解决方案1】:

    您的数据结构有点奇怪,在我看来,您应该为每个条目设置单独的对象,而不是保留可能的逗号分隔值。但是,您可以通过将 Django Q() 对象连接在一起来做到这一点:

    1. 完全匹配“1.2.3”,或
    2. 包含“,1.2.3”的结果,或
    3. 包含“, 1.2.3”的结果
    from django.db.models import Q
    
    col_2_count = TableName.objects.filter(
       Q(col2="1.2.3")|
       Q(col2__icontains=",1.2.3")|
       Q(col2__icontains=", 1.2.3")
    )
    

    因为您有多种可能的选项,您需要将几个Q() 选项串在一起。 | 字符被视为OR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 2023-04-07
      相关资源
      最近更新 更多