0

我有这个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)
4

1 回答 1

1

你知道设备序列号,所以使用 -

equip = Equipment.objects.get(serialno=sn)

因为您equipment的 RSL 类和Equipment类的字段是 Many2Many 关系,所以可能有多个 RSL 类对象与一个 Equipment 对象相关。要获取查询集,请使用 -

rsl_queryset = equip.rsl_set.all()

(请检查是否rsl_set是装备对象的方法,通过检查它是否列在中dir(equip)。看看你的模型,很可能是。顺便说一句,你可以通过添加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
于 2013-08-25T05:39:09.763 回答