6

私の Django プロジェクトでは、各 Django ユーザーのプロファイルがあり、プロファイルは Info モデルに関連しています。どちらの関係も OneToOne です。ほとんどの場合、1 人のユーザーに対して Profile モデルと Info モデルの両方を使用しているため、データベースに再度アクセスしないように、デフォルトでこれらのモデルが選択されるようにしたいと考えています。Django 認証を使用してこれを行う方法はありますか?

4

2 に答える 2

4

これがしばらくここにあることは知っていますが、他の誰かが同様の状況に直面した場合に備えて、私の解決策を追加しています. Django (v1.8 および v1.7 の時点) では、マネージャー(クエリ時に使用される .objects ) をカスタマイズできます。

プロファイルに次のようなマネージャーを設定できます。

class ProfileManager(models.Manager):
    def get_queryset(self):
        return super(ProfileManager,self).get_queryset().select_related('user')

次に、モデルで:

class Profile(models.Model):
    user = models.OneToOneField(
        User,
        primary_key=True,
        on_delete=models.CASCADE
    )

    # ... other fields 

    # the manager
    objects = ProfileManager()

    # ...

次に、プロファイルに関するすべてのクエリで、関連するユーザーも自動的に選択されます。

このコードを拡張してInfoモデルも含めることができます。

于 2016-06-03T08:04:25.877 に答える
0

カスタム User モデルの select 関連機能には、django >=1.5 を使用します。

user = User.objects.select_related('profile_related', 'info_related')
于 2014-08-11T11:08:09.247 に答える