如果不需要某些字段,如何在 Django 模型中搜索

how to search in django models if some fields are not required

所以在我的模型中有 blank=True 个字段。我也在这个模型中进行了搜索,但是如果某些字段是 blank=True,则用户无法填写此字段。如果有些字段为空,我该怎么办?

例如,我有带有名字和姓氏的模型(空白=真)。如果姓氏未填写在搜索表单中,我应该制作一个过滤器,但如果姓氏已填写,我应该制作带有姓氏的过滤器?

您可以分部分构建 QS:

def you_view(request, name, surname):
    # ... Get you filter parameters, just an example.
    qs = MyModel.objects.filter(name=name)
    if surname:
        qs = qs.filter(surname=surname)
    # work with qs

仅当您的视图中存在 surname 变量时,才会按 surname 进行过滤。

当您必须从一长串表单数据构建过滤器时,以下内容通常很方便。

import operator
from django.db.models import Q
filter_list = [Q(name=name)]
if surname:
    filter_list.append(Q(surname=surname))

YourModel.objects.filter(reduce(operator.and_, filter_list))

嗯,我有一个非常可笑的情况。在我的模型中,我创建了一些字段 blank=True 并忘记执行 makemigrations!所以不要忘记进行迁移