【问题标题】:Django, how to use filter to check if string field is a substring of a parameter?Django,如何使用过滤器检查字符串字段是否是参数的子字符串?
【发布时间】:2020-05-20 10:47:28
【问题描述】:

我在 Django 中有一个这样的模型 -

class City:
    name = models.CharField(max_length=255)

现在下面的查询可以过滤参数字符串是否是城市模型中名称字段的子字符串--

results = City.objects.filter(name_icontains=<some_string>).all()

假设城市表的数据库中的其中一行具有 name = "new york city",因此如果将查询字符串指定为 "new york",则上述过滤器查询将与之匹配,因为 "new york" 是包含在“纽约市”中。

现在在阅读了这个问题的答案之后——

Django, how to use filter to check if string field is contained in parameter

我可以通过将查询字符串分解成单词然后对每个单词应用过滤查询来解决这个问题。但是,如果我的查询字符串不是两个单独的单词而是一个长单词,如何解决这个问题。这是一个例子 -

假设 city 表的一行包含名称为“newyork”,我的查询字符串是“newyorkcity”,现在我不能将“newyorkcity”查询字符串分成单独的单词并应用单独的过滤。那么我该如何解决这个问题,以便当我搜索匹配名称为“newyorkcity”的行时,它应该返回包含名称为“newyork”的行?

我希望我的解释很清楚。

谢谢

【问题讨论】:

    标签: django orm django-queryset


    【解决方案1】:

    你能试试这个查询吗?

    City.objects.annotate(
        string=Value('newyorkcity', output_field=CharField())
    ).filter(string__icontains=F('name'))
    

    【讨论】:

    • 在您提到的查询中包含output_field=CharField() 会产生此错误CharField object has no attribute 'get_lookup',但删除 output_field 参数后查询工作正常。
    猜你喜欢
    • 2016-10-13
    • 2022-08-08
    • 2019-02-04
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2011-02-07
    • 2011-11-09
    • 2013-05-18
    相关资源
    最近更新 更多