首页 > 解决方案 > 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 条目:

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

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

姓:穆特曼
访问:熊,真

标签: djangomany-to-one

解决方案


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

from django.db.models import Prefetch


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

推荐阅读