django - Django过滤时值无或不或某些值
问题描述
我想过滤我的模型值。我有三个领域。该字段可以是null
或 None
或某个值。如何在值为空或不为空时防止过滤器错误:
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 作为查询值。
解决方案
如果 exitDate 为或小于或等于 ,您可以使用Q
对象检索该对象。我们还可以通过过滤来优化搜索,而不是首先进行查询来获取标签。Info
NULL
endDate
tag_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
)
推荐阅读
- unity3d - 将 int 字段作为参数参数传递的问题,但所有其他人都可以完美地工作,这怎么可能?
- api - 有没有一种安全的方法可以在桌面应用程序中包含 API 令牌?(JIRA 集成)
- spring - javax.websocket.DeploymentException:来自服务器的 HTTP 响应 [HTTP/1.1 200 OK ] 不允许 HTTP 升级到 WebSocket
- gitlab - 在 GitLab 中触发 CodeDeploy?
- sql-server - 替换另一个表中的多个值
- javascript - 如何使用按钮删除通过 javascript 添加的“待办事项”列表项
- django - 下载链接或查看文件链接
- java - 将字符串转换为嵌套的 Json (Java)
- python - 如何获得没有填充的标记,来自 seaborn 0.11+
- python - Python:读取 csv 文件中的列,确保 if 语句使用正确的大小写