2012-11-21 46 views
0

我有一個模型定義是這樣的:查找用戶通過模型

class Person(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 

在用戶登錄後,我查找用戶:

user = authenticate(username=usr, password=pwd) 

如何獲取Person對象這與這個用戶有關?

person = Person.objects.filter(user=usr) # I guess not like this... 

回答

0

您使用的是pre django v1.5嗎? 如果是這樣的:https://docs.djangoproject.com/en/1.4/topics/auth/#storing-additional-information-about-users

也,你可以創建一個簡單的屬性:

User.person = property(lambda u: Person.objects.get_or_create(user=u)[0]) 

...所以當你要訪問用戶的個人屬性:

user.person.attribute_a 

的Django 1.5現在有定製用戶模型(使Person有點不相干)

https://docs.djangoproject.com/en/1.5/topics/auth/#customizing-the-user-model

+0

我有幾種擴展內置用戶的用戶,所以真的希望能夠查找這些基於'用戶'。沒有辦法做到這一點? – ESoft

+0

你可以發佈你的模型,這樣我可以更好地理解這個問題嗎? –

0

您可以在Django中使用OneToOne關係的一般查詢方法。 https://docs.djangoproject.com/en/dev/topics/db/queries/#one-to-one-relationships

從技術上講,你可以做你寫的:

person = Person.objects.filter(user=usr) 

這是因爲Django中也創造了落後的關係。 https://docs.djangoproject.com/en/dev/topics/db/queries/#how-are-the-backward-relationships-possible

例,

class UserDetail(models.Model): 
    # You should actually use django.contrib.auth.get_user_model() 
    user = models.OneToOneField(User) 
    funny_comment = models.TextField() 

user = authenticate(username=usr, password=pwd) 
user.userdetail # return the user detail object 

我認爲你需要自定義的用戶模型(1.5版本)假如你正在做的自定義身份驗證,或者如果你只是想添加一些字段。如果您想存儲詳細的配置文件信息,您應該與用戶模型建立OneToOne關係,並且您可以像任何常規模型關係一樣查詢鏈接的模型。