0

モデルがユーザーモードを拡張するアプリが1つあります。

class ExtendedUser (models.Model):
    user = models.ForeignKey(User)
    favorite_color = models.CharField(...
    #...

ユーザーモデルの外部キーを持つ別のアプリがあります。

特定のユーザーに関連するすべての情報にアクセスするにはどうすればよいですか?

私の問題は、私が逆の関係を作ろうとすると起こります(私は思う)、これが私が試みることです:

>>from django.contrib.auth.models import User
>>from firstapp.models import ExtendedUser

>>a = User.objects.get(pk=1)
>>a
<User: username1>
>>b = a.favorite_color
AttributeError: 'User' object has no attribute 'favorite_color'
>>c = ExtendedUser.objects.get(pk=1)
>>c
<User: username1>
>>c.favorite_color
<Favorite_color: blue>

問題は、「a」を使用している場合、「favorite_color」などのユーザーの拡張モデル情報にアクセスできず、「c」を使用している場合、電子メールやパーマなどのユーザーモデルのネイティブ情報にアクセスできないことです。これを行う方法はありますか?

そしてまた、

1つのユーザーIDを選択して、そのオブジェクトに関連するすべてのフィールド(すべてのモデルとアプリから)を表示する方法はありますか?

4

1 に答える 1

1

しかし、これは「ユーザー モデルの拡張」ではありません。ForeignKey を介して、完全に異なるモデルへの参照があります。favorite_color突然 User モデルの属性になることを期待する理由がわかりません。

ForeignKey (ユーザーごとに多数の ExtendedUsers を意味する) の代わりに、OneToOneField. 次に、関係を直接たどることができます。

user = User.objects.get(pk=1)
print user.extendeduser.favorite_color
于 2013-03-06T17:20:35.120 に答える