ошибка при доступе к объектам в связи ManyToMany - PullRequest
0 голосов
/ 25 октября 2011

У меня есть эти 2 модели:

class Agency(models.Model):
   Location=models.ForeignKey(Location)
   Name=models.CharField(max_length=50)
   WebSite=models.CharField(max_length=100)

class AgencyPosition(models.Model):
   Agency=models.ForeignKey(Agency)
   Users=models.ManyToManyField(User)
   PhoneNumber=models.CharField(max_length=50)
   Email=models.CharField(max_length=50)

, когда пользователь входит в систему, я хочу получить агентство, к которому принадлежит пользователь.Я использую это, чтобы получить позицию пользователя:

agnposition=user.agencyposition_set.all()[:1]

все хорошо, пока здесь. Теперь я хочу получить агентство от agnposition Я пробовал так много вещей, как это:

agn=Agency.objects.get(pk=agnposition.agency_set.id)

или

agn=Agency.object.filter(pk=agnposition.Agency.id)

или

agn=Agency.object.filter(pk=agnposition__Agency.id)

но у всех них были такие ошибки: '

'QuerySet' object has no attribute 'Agency'

как мне справиться с этим?

Заранее спасибо за любую помощь: D

Ответы [ 2 ]

1 голос
/ 25 октября 2011

как получить экземпляр вместо набора запросов при использовании этого user.agencyposition_set.all () [: 1]?

Если вы нарезаете набор запросов, вы получаете другой набор запросовтак что если вам нужен экземпляр, просто сделайте:

agnposition = user.agencyposition_set.all()[0]

Есть ли опечатка в вашем классе AgencyPosition?Это так:

class AgencyPosition(models.Model):
    Agency=models.ForeignKey(Agent)
    ...

Или:

class AgencyPosition(models.Model):
    Agency=models.ForeignKey(Agency)
    ...

Обновление

Не думаю, что это правильно:

agn=Agency.objects.get(pk=agnposition.agency_set.id)

'agency_set' является объектом RelatedManager и не имеет атрибута 'id'.Попробуйте это:

agnposition = user.agencyposition_set.all()[0]
agn = Agency.objects.get(pk=agnposition.agency.pk)

И, о боже, пожалуйста, не пишите в верхнем регистре имена полей;)

1 голос
/ 25 октября 2011

Во-первых, я думаю, что соглашение состоит в том, чтобы использовать строчные буквы с подчеркиванием для атрибутов в классах Python,

Далее, когда вы используете user.agencyposition_set.all()[:1], я думаю, что возвращает объект набора запросов, а не экземпляр нужного вам классая думаю, вам может понадобиться только экземпляр для доступа к его атрибутам.

Чтобы получить пользовательское агентство, вы можете user.agencypostiion_set.all()[0].Agency Это должен быть объект агентства, связанный с конкретным пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...