python - 反向查找“QuerySet”对象没有属性
问题描述
我有以下模型,我在其中定义了一家货运公司及其保险公司。模型.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”对象没有属性“caliinsfk_set”
解决方案
鉴于您想要没有相关的Truckers
对象,您可以:CaliIns_FK
.filter()
Trucks
Truckers.objects.filter(caliins_fk__isnull=True)
或鉴于ForeignKey
has a related_name
,它应该是:
Truckers.objects.filter(myrelatedname__isnull=True)
(其中的myrelatedname
值) 在这里,我们因此获得没有相关对象的a 。related_name
ForeignKey
QuerySet
CaliIns_FK
这会产生一个带有 a 的查询,LEFT OUTER JOIN
因此如果相关 s 的“集合”CaliIns_FK
为空,它将有一行带有NULL
:
SELECT truckers.*
FROM truckers
LEFT OUTER JOIN caliins_fk ON truckers.DOT_Number = caliins_fk.DOTNmb_id
WHERE caliins_fk.id IS NULL
请注意,模型通常不使用复数名称,或外键中的主键名称。根据 PEP-8,属性也用小写字母和下划线书写。一个更 Django-ish 的方法是:
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)
推荐阅读
- git - 终端向我显示“还原当前正在进行中”。
- python - 无法在 Mac 上使用 pygame 创建窗口
- assembly - NASM 仅包括标签等引用,但不包括代码
- c++ - 如何在应用程序退出()期间处理 Qthread 终止?
- c - 链表创建和显示
- html - 在鼠标悬停时覆盖 div 框的最简单解决方案?
- leaflet - 1.7.1 标记 bindpopup 的弹出延迟(仅限 SAFARI 和 1.7.1 的延迟)
- python - sqlalchemy 按 mysql python 排序
- url - 提取编码查询参数 GTM
- oracle - "; 预期 "., ("; 运行 JPA 查询