代码之家  ›  专栏  ›  技术社区  ›  Lev

反向查找“QuerySet”对象没有属性

  •  1
  • Lev  · 技术社区  · 7 年前

    Models.py:

    class Truckers(models.Model):
        DOT_Number = models.IntegerField(primary_key=True)
        Address = models.CharField( max_length=200)  
    
    class CaliIns_FK(models.Model):
        DOTNmb = models.ForeignKey(Truckers, on_delete=models.CASCADE) 
        CoName = models.CharField(max_length=20)
    

    django :

    truck = Truckers.objects.all()
    filtered = truck.caliinsfk_set.filter(truckers__isnull=True)
    

    filtered = truck.caliins_fk_set.filter(truckers__isnull=True)
    

    获取错误:

    AttributeError:“QuerySet”对象没有属性“Calinisfk_set”

    1 回复  |  直到 7 年前
        1
  •  1
  •   willeM_ Van Onsem    7 年前

    只要你愿意 Truckers 不 相关的 CaliIns_FK .filter() 你的 Trucks :

    Truckers.objects.filter(caliins_fk__isnull=True)

    或者考虑到 ForeignKey 有一个 related_name ,应该是:

    Truckers.objects.filter(myrelatedname__isnull=True)

    (有 myrelatedname 价值 相关名称 外侨 ) 在这里,我们得到一个结果 QuerySet 不 相关的 对象

    LEFT OUTER JOIN 因此,如果“集”相关 卡林斯大学 NULL :

    SELECT truckers.*
    FROM truckers
    LEFT OUTER JOIN caliins_fk ON truckers.DOT_Number = caliins_fk.DOTNmb_id
    WHERE caliins_fk.id IS NULL
    

    不

    class Trucker(models.Model):
        dot_number = models.IntegerField(primary_key=True)
        address = models.CharField( max_length=200)
    
    CaliInsurance(models.Model):
        trucker = models.ForeignKey(Trucker, on_delete=models.CASCADE)
        coname = models.CharField(max_length=20)

    在这种情况下,查询如下所示:

    Trucker.objects.filter(caliinsurance__isnull=True)