如果不需要某些字段,如何在 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!所以不要忘记进行迁移
所以在我的模型中有 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!所以不要忘记进行迁移