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

2 に答える 2

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

于 2012-11-21T19:14:27.363 に答える
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 関係を作成する必要があり、通常のモデル関係と同様に、リンクされたモデルをクエリできます。

于 2012-11-21T19:48:16.683 に答える