访问多对多关系中的对象时出错

发布于 2024-12-11 18:10:55 字数 960 浏览 0 评论 0原文

我有这两种模型:

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

I have these 2 models:

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)

when user login I wanna get the agency that user is belonge to.
I use this to get user's position:

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

every thing is good til here.now i wanna get the agency from agnposition I've tryed so many things like this:

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

or

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

or

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

but all of them had errors like this:'

'QuerySet' object has no attribute 'Agency'

how can I handle this?

thanks in advance for any help :D

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岁月静好 2024-12-18 18:10:55

首先,我认为约定是在 python 类中使用小写字母和下划线作为属性,

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

要获取用户代理,您可以 user.agencypostiion_set.all()[0].Agency 这应该是连接到特定用户的代理对象。

first off i think convention is to use lowercase with underscores for attributes in python classes,

Next, when you use user.agencyposition_set.all()[:1] i think that returns a queryset object not an instance of the class you want, i think you might need just an instance to access its attributes.

To get a users Agency you can user.agencypostiion_set.all()[0].Agency This should be an agency object connected to the particular user.

旧伤慢歌 2024-12-18 18:10:55

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

天哪,请不要将字段名称大写;)

how can i get an instance instead of a query set when using this
user.agencyposition_set.all()[:1] ?

If you slice a queryset you get another queryset, so if you need an instance just do:

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

Is there a typo in your AgencyPosition class? Is it?:

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

Or:

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

Update

I don't think is correct to do:

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

'agency_set' is a RelatedManager object and has no attribute 'id'. Try this:

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

And please oh god please don't you uppercase for your field names ;)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文