0

私の Django アプリでは、いくつかの追加フィールドを持つユーザー モデルを作成する必要があります。DB のパフォーマンスのために、これらのフィールドにアクセスするたびに結合することは避けたいと思います。DB レベルでは、ユーザー テーブルに ALTER TABLE を生成してこれらのフィールドを追加したいと思います。または、アプリの初期化に必要なすべてのフィールドを含む CREATE TABLE でさえ、まだ開発中なので問題ありません。

ユーザー モデルを拡張するための 2 つの解決策を見つけました (以下に報告) が、どちらも JOIN を回避するという私の選択と矛盾しています。

models.py (Solution 1)
from django.db import models

class Person(models.Model):
    # Aggregate using a OneToOneField on User
    user = models.OneToOneField(User)
    age = models.PositiveSmallIntegerField()

models.py (Solution 2)
from django.contrib.auth.models import User

class Person(User):
     # Inheriting from User
     age = models.PositiveSmallIntegerField() 

SQL (Solution 1)
/* Aggregate using a OneToOneField on User */
BEGIN;
CREATE TABLE "people_person" (
 "id" integer NOT NULL PRIMARY KEY,
 "user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"),
 "age" smallint unsigned NOT NULL
);
 COMMIT;

SQL (Solution 2)
/* Inheriting from User */
BEGIN;
CREATE TABLE "people_person" (
 "user_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "auth_user" ("id"),
 "age" smallint unsigned NOT NULL
);
 COMMIT;
4

1 に答える 1

1

django 1.5 から、ユーザー モデルを拡張するのではなく、置き換えることが可能になりました。

https://docs.djangoproject.com/en/dev/releases/1.5/#configurable-user-model

django 1.4 以前では、ユーザーの「プロファイル」属性が特別なキャッシュを取得します。これは、要件に対して十分である場合とそうでない場合があります。

于 2012-12-29T14:11:02.543 に答える