【问题标题】:Django QuerySet filter over stringDjango QuerySet 过滤字符串
【发布时间】:2016-11-25 09:53:23
【问题描述】:

我有一个包含一些行的 models.py 文件,我想在我的 HTML 模板上返回与我的过滤器 QuerySet 对应的所有行。

#models.py

def Test(request) :

    CarCollection = MyModel.objects.filter(car="old")

    context = {
        "CarCollection" : CarCollection
    }

    return render(request, 'car.html', context)

我的 html 模板看起来像:

<!-- car.html -->

{% block content %} 
<ul>
{% for car in CarCollection %}
  <li>{{ car }}</li>
{% endfor %}
</ul>

{% endblock %}

但我的对象看起来像:

Volvo_old_car
Audi_old_car
Nissan_new_car
old_Bentley

所以我想在我的对象中隔离一个字符串(例如old)并返回所有带有这个字符串的对象。但是这个字符串可以在开头、中间或结尾。

过滤器将返回:

Volvo_old_car
Audi_old_car
old_bentley

我需要使用正则表达式来做到这一点吗?

提前谢谢你

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    而不是

    MyModel.objects.filter(car="old")
    

    MyModel.objects.filter(car__icontains="old")
    

    这将告诉 Django 过滤掉所有 MyModel 对象,其中 car 字段包含 old

    注意:如果您想要区分大小写的搜索,也可以直接使用car__contains="old"

    附:您绝对应该检查 PEP8 Python 约定。这将帮助您编写易于 Python 开发人员阅读的代码。

    【讨论】:

    • 非常感谢,我不知道这个选项!
    【解决方案2】:

    您可以使用: 在查询中结束或开始。

    CarCollection = MyModel.objects.filter(car__istartswith="old")
    

    【讨论】:

      【解决方案3】:

      您可以使用 Django 提供的字段查找来过滤您的查询集。

      Django - Field lookups

      MyModel.objects.filter(car__contains="old")
      

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 2014-07-13
        • 1970-01-01
        • 2018-01-05
        • 2013-09-08
        • 1970-01-01
        • 1970-01-01
        • 2018-10-09
        • 2018-02-13
        相关资源
        最近更新 更多