Django QuerySet 过滤字符串

Django QuerySet filter over string

我有一个包含一些行的 models.py 文件,我想在我的 HTML 模板上 return 所有与我的过滤器 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)并且return所有对象都带有这个字符串。但是这个字符串可以在开头,中间或结尾。

过滤器将 return :

Volvo_old_car
Audi_old_car
old_bentley

我需要使用 Regex 来做到这一点吗?

提前致谢

您可以使用: endswith 或 istartswith 在查询中。

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

而不是

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

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

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

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

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

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

Django - Field lookups

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