2011-10-25 73 views
0

訪問對象我有這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) 

當用戶登錄我想要得到的機構,用戶belonge來。 我使用它來獲取用戶的位置:

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

每一件事情是好的直到here.now我想從agnposition獲得代理我tryed很多事情是這樣的:

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

回答

1

首先,我認爲約定是使用小寫用下劃線在Python類的屬性,

接下來,當您使用user.agencyposition_set.all()[:1]我認爲返回一個QuerySet對象不是你想要的類的實例,我想你可能只需要一個實例來訪問它的屬性。

要獲得用戶代理,您可以user.agencypostiion_set.all()[0].Agency這應該是連接到特定用戶的代理對象。

+0

這是我的回答:AGN = user.agencyposition_set.all()[0] .Agency。感謝U evey身體:D –

1

如何使用此 user.agencyposition_set.all()[:1]獲取實例而不是查詢集?

如果你切一個QuerySet你得到另一個查詢集,所以如果你需要一個實例只是做:

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) 

並請上帝啊,請你不大寫爲您的字段名;)

+0

這是正確的模型:class AgencyPosition(models.Model): Agency = models.ForeignKey(Agency) ... –