【发布时间】:2012-12-14 11:27:39
【问题描述】:
在我的 Django 应用程序中,我需要创建一个包含一些额外字段的用户模型。对于数据库性能,我想避免每次我想访问这些字段时加入。在数据库级别,我想在用户表上生成一个 ALTER TABLE 以添加这些字段,或者甚至创建一个包含应用程序初始化所需的所有字段的 CREATE TABLE 都可以,因为我仍在开发中。
我找到了两种扩展用户模型的解决方案(如下所述),但两者都与我避免 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;
【问题讨论】:
标签: django django-models django-users