在ManyToMany关系中访问对象时出错

时间:2011-10-25 19:01:35

标签: python django

我有这两个型号:

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 个答案:

答案 0 :(得分:1)

首先,我认为约定是在python类中使用带有下划线的小写,

接下来,当您使用user.agencyposition_set.all()[:1]时,我认为返回一个查询集对象而不是您想要的类的实例,我认为您可能只需要一个实例来访问其属性。

要获取用户代理商,您可以user.agencypostiion_set.all()[0].Agency这应该是与特定用户相关联的代理商对象。

答案 1 :(得分:1)

  

如何在使用时获取实例而不是查询集   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)

请上帝,请不要为你的字段名称大写;)