通过模型查找用户

时间:2012-11-21 19:07:57

标签: django django-forms

我的模型定义如下:

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...

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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关系,并且可以像任何常规模型关系一样查询链接模型。