2011-10-30 22 views
0
に拡大するには、

私は2つの修正を組み込みクラスのユーザーからのUserProfileクラスを継承させたい:Userモデルの継承とDjango

1)ユーザ名フィールドはないユニークである必要があります

2)電子メールフィールドは一意でなければなりません

したがって、この2つのフィールドをUserProfileクラスでオーバーライドする方法はありますか?

私が理解するように私はクラスUserを変更することができないので、私は何とかUserProfileクラスでこの変更を行う必要があります... しかし、それを行う方法??? お願いします!

ありがとうございます!!!!

答えて

1

私はあなたがちょうど猿のパッチをするべきだと思います。

私は決してこれをやったことはありませんでしたが、これは楽しいものでした。気にするようであるすべての属性_uniqueが真か偽であるということです(私たちはunique=Trueに合格する必要があるだろう)モデルフィールドのinit関数

def __init__(self, verbose_name=None, name=None, primary_key=False, 
     max_length=None, unique=False, blank=False, null=False, 
     db_index=False, rel=None, default=NOT_PROVIDED, editable=True, 
     serialize=True, unique_for_date=None, unique_for_month=None, 
     unique_for_year=None, choices=None, help_text='', db_column=None, 
     db_tablespace=None, auto_created=False, validators=[], 
     error_messages=None): 
    self.name = name 
    self.verbose_name = verbose_name 
    self.primary_key = primary_key 
    self.max_length, self._unique = max_length, unique 

をチェックしてください。残りのジャンゴの魔法は、その属性がどのように設定されているか気にしてはいけません。

があなたの INSTALLED_APPSのどこかにモンキーパッチアプリを入れて、あなたの models.py(オートロードされている)でこれを置く:

CREATE TABLE "auth_user" (
    "id" integer NOT NULL PRIMARY KEY, 
    "username" varchar(30) NOT NULL, 
    "first_name" varchar(30) NOT NULL, 
    "last_name" varchar(30) NOT NULL, 
    "email" varchar(75) NOT NULL UNIQUE, 
    "password" varchar(128) NOT NULL, 
    "is_staff" bool NOT NULL, 
    "is_active" bool NOT NULL, 
    "is_superuser" bool NOT NULL, 
    "last_login" datetime NOT NULL, 
    "date_joined" datetime NOT NULL 
) 
:十分

from django.contrib.auth.models import User 
User._meta.get_field("username")._unique = False 
User._meta.get_field("email")._unique = True 

確かに、Djangoは以下のSQLを生成し、

関連する問題