2013-08-25 5 views
0

Я это models.pyДжанго QuerySet ManytoMany и OnetoMany

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) 

Я знаю только Equipmentserialno, я не могу понять, правильное QuerySet? До сих пор я знаю, как запросить внешний ключ.

sn  = 'abc' 

equip = Equipment.objects.get(serialno=sn) 
rsl  = RSL.objects.????? 
sitename = Site.objects.get(pk=rsl.pk) 
+0

'RSL.objects.get (pk = 1)'? –

+1

«До сих пор я знаю, как запросить внешний ключ». - возможно, вам следует пройти через [tutorial] (https://docs.djangoproject.com/en/1.5/intro/tutorial01/) –

+0

Я плохой, я не знал, как использовать '_set' до сих пор. – Charlesliam

ответ

1

Вы знаете оборудование серийный номер, так что использовать -.

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

Поскольку ваш equipment поле класса РГБ и Equipment класса являются Many2Many отношение, там, может быть, объекты более чем один RSL классов, связанных с один объект оборудования. Чтобы получить QuerySet, использование -..

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 
+0

Это хорошо объяснено .. Добавление цикла for в сторону от использования '_set'. – Charlesliam