我有这个models.py
class Sitename(models.Model):
#id = models.AutoField(primary_key=True) ## to be removed
site = models.CharField() ## find values
class Equipment(models.Model):
#id = models.AutoField(primary_key=True) ## to be removed
serialno = models.CharField() ## known values
class RSL(models.Model): ##Radio Station License
#id = models.AutoField(primary_key=True) ## to be removed
sitename = models.ForeignKey(Sitename)
equipment = models.ManyToManyField(Equipment)
我只知道Equipment
serialno
,我无法找出正确的查询集?
到目前为止,我知道如何查询外键。
sn = 'abc'
equip = Equipment.objects.get(serialno=sn)
rsl = RSL.objects.?????
sitename = Site.objects.get(pk=rsl.pk)
答案 0 :(得分:1)
您知道设备序列号,因此请使用 -
equip = Equipment.objects.get(serialno=sn)
因为RSL类和equipment
类的Equipment
字段是Many2Many关系,所以可能有多个RSL类对象与一个Equipment对象相关。要获取查询集,请使用 -
rsl_queryset = equip.rsl_set.all()
(请检查rsl_set
是否是装备对象的方法,方法是检查它是否列在dir(equip)
中。看看你的模型,很可能是.BTW,你可以把它改成名字你想通过添加related_name =“你想要的名字”到定义。
例如: -
equipment = models.ManyToManyField(Equipment, related_name = "rsl_objects")
这样您可以通过rsl_queryset = equip.rsl_objects.all()
)
现在您有一个包含与装备对象相关的RSL对象的查询集。因此,迭代它们以获得您想要的值 -
for rsl_object in rsl_queryset:
print "site = " + rsl_object.sitename.site