Python Django queryset许多和一个公司
我有这个模型Python Django queryset许多和一个公司,python,django,django-queryset,Python,Django,Django Queryset,我有这个模型 class Sitename(models.Model): #id = models.AutoField(primary_key=True) ## to be removed site = models.CharField() ## find values class Equipment(models.Model): #id = models.Aut
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)
我只知道设备
序列号
,我想不出正确的查询集?
到目前为止,我知道如何查询外键
sn = 'abc'
equip = Equipment.objects.get(serialno=sn)
rsl = RSL.objects.?????
sitename = Site.objects.get(pk=rsl.pk)
您知道设备序列号,所以请使用-
equip = Equipment.objects.get(serialno=sn)
由于您的RSL类的设备
字段和设备
类有很多关系,因此可能有多个RSL类对象与一个设备对象相关。要获取查询集,请使用-
rsl_queryset = equip.rsl_set.all()
(请通过检查dir(equip)
中是否列出了装备对象,检查rsl\u set
是否是装备对象的方法。查看您的模型,很可能是这样。顺便说一句,您可以通过在定义中添加相关的\u name=“name you want”将其更改为您想要的名称。
例如:-
device=models.ManyToManyField(设备,相关的\u name=“rsl\u对象”)
通过这种方式,您可以通过rsl\u queryset=equip.rsl\u objects.all()
)访问它
现在您有了一个包含与装备对象相关的RSL对象的查询集。因此,对它们进行迭代以获得所需的值-
for rsl_object in rsl_queryset:
print "site = " + rsl_object.sitename.site
RSL.objects.get(pk=1)
?“到目前为止,我知道如何查询外键。”-也许你应该看看“我不好,我不知道如何使用\u集”
。Django自动生成ID字段。您不需要显式地定义它,除非您确实需要它。让您的模型定义简洁明了。我明白了。我会记住这一点。这已经解释清楚了。除了使用\u set
之外,还添加了for循环。