首页 > 解决方案 > Django过滤时值无或不或某些值

问题描述

我想过滤我的模型值。我有三个领域。该字段可以是nullNone或某个值。如何在值为空或不为空时防止过滤器错误:

queryset = info.objects.filter(tag_id=tag.objects.get(pk=tag_id), entryDate__gte=startDate, exitDate__lte=endDate)

这是我的模型:

class info (models.Model):

    tag = models.ForeignKey(equipment_models.tag, on_delete=models.CASCADE)
    entryDate = models.DateTimeField()
    exitDate = models.DateTimeField(blank=True, null=True)

    def __int__(self):

当 tag_id、startDate 或 endDate 中的任何一个为 None 时,我无法使用 None 作为查询值。

标签: django

解决方案


如果 exitDate 为或小于或等于 ,您可以使用Q对象检索该对象。我们还可以通过过滤来优化搜索,而不是首先进行查询来获取标签。InfoNULLendDatetag_id

此外,我们可以构造一个Q仅在相应值不是时才添加条件的对象None

from django.db.models import Q

my_q = Q()
if endDate is not None:
    my_q = Q(exitDate__lte=endDate)
if tag_id is not None:
    my_q &= Q(tag_id=tag_id)
if startDate is not None:
    my_q &= Q(entryDate__gte=startDate)

queryset = Info.objects.filter(
    my_q
)

推荐阅读