Django Q对象查询过滤,多个条件失败

2024-03-28 16:09:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对我的筛选器应用多个条件。模型看起来像这样

class modelChat(models.Model):
    source              = models.ForeignKey(modelEmployer,related_name = 'rsource',on_delete=models.CASCADE,null=True,default=None,blank=True)
    job                 = models.ForeignKey(modelJob,on_delete=models.CASCADE,null=True,default=None,blank=True)
    destination         = models.ForeignKey(modelEmployer,related_name = 'rdestination',on_delete=models.CASCADE,null=True,default=None,blank=True)

最初,我试图获得一个聊天实例,其中包括基于一份工作的两个当事人。在某一点上,源可以是目的地,有时目的地也可以是源。但工作还是一样。在

这就是我的查询结果

^{pr2}$

作业id是正确的,我知道数据库中只有一个项目。但是这个查询总是返回一个空项。有什么建议,为什么这是错误的,我如何解决它?在


Tags: namenonetruedefaultonmodels条件delete
1条回答
网友
1楼 · 发布于 2024-03-28 16:09:28

我不能确定这是否是问题所在,因为你忘了展示你在数据库中真正拥有的东西,但这里:

(Q(destination=modelEmployerDestinationInstance) |   Q(destination=modelEmployerDestinationInstance))

我想你想:

^{pr2}$

相反。。。在

请注意,使用较短的名称,即source和{}而不是{}modelEmployerDestinationInstance,逻辑性会更加明显:

q = (
        (Q(source=source) | Q(destination=source))
      & (Q(source=destination | Q(destination=destination))
      & Q(job_id=job_id)
    )
querySet = modelChat.objects.filter(q)

有意义的名字是件好事,但它们必须足够简短和清晰。使用“modelEmployerXXXInstance”,您需要解析四个单词,而名称中唯一独特(因此相关)的部分位于第三位,您的大脑往往会跳过这一部分。“模型”、“雇主”和“实例”部分实际上只是噪音。在

相关问题 更多 >