【问题标题】:Django how can I query only the records which exactly fullfill the filter condition in a Many-to-one conditionDjango如何仅查询在多对一条件下完全满足过滤条件的记录
【发布时间】:2020-10-27 08:00:51
【问题描述】:

我有以下型号:

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

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

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

姓:穆特曼
访问:熊,真实

【问题讨论】:

  • 哦,我的描述是错误的:“visits__signe_in = True”是对的。

标签: django many-to-one


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这个:

    McMbData.objects.filter(visits__signe_in = True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      相关资源
      最近更新 更多