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条目:

姓氏:穆特曼
访问:熊,真-叛徒,假-好莱坞,假

我只想得到真实的访问记录。像这样:

姓氏:穆特曼
访问:熊,真正的

对于任何可以覆盖预取查询集的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)

最新更新