Django我如何只查询在多对一条件下完全满足过滤条件的记录

问题描述

我有以下型号:

class McMbData(models.Model):
lastname      = models.CharField(max_length=50,blank=True) 

class Visits(models.Model):
mcmbdata_id   = models.ForeignKey(McMbData,on_delete=models.CASCADE)
name      = models.CharField(max_length=50,blank=True) 
signe_in  = models.BooleanField(default=False)

我只想获取signe_in = True

的访问记录

这是我尝试过的:

McMbData.objects.filter(visits__signe_in = False)

因此,我获得了至少满足条件一次的所有McMbData条目:

姓氏:Mutermann
访问次数:熊,真-叛徒,假-好莱坞,假

我只想获取真实的访问条目。像这样:

姓氏:Mutermann
造访次数:熊,真实

解决方法

对于任何可以覆盖预取查询集的McMbData对象,您只需要signe_in = True Visits。

from django.db.models import Prefetch


McMbData.objects.prefetch_related(
    Prefetch(
        'visits_set',queryset=Visits.objects.filter(signe_in=True)
    )
)
,

尝试一下:

McMbData.objects.filter(visits__signe_in = True)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...