2012-12-29 49 views
0

在我的Django應用程序中,我需要創建一個帶有一些額外字段的用戶模型。對於數據庫性能,我希望避免在每次我想訪問這些字段時加入。在數據庫級別,我希望在用戶表上生成一個ALTER TABLE以添加這些字段,甚至在應用程序初始化時需要所有字段的CREATE TABLE都沒有問題,因爲我仍在開發中。Django:擴展避免數據庫連接的用戶模型

我發現了兩種解決方案來擴展用戶模型(下面報告),但都與我選擇避免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; 

回答