2011-10-30 2 views
0
의 확대는

나는이 수정을 내장 클래스 사용자에서 사용자 프로필 클래스를 상속 할 :사용자 모델 상속과 장고

1) 사용자 이름 필드를 잘 작성하지 고유해야합니다

2) 이메일 필드가 고유해야합니다

그래서이 두 필드를 UserProfile 클래스로 재정의하는 방법은 무엇입니까?

나는 클래스 사용자를 변경할 수 없다는 것을 알고 있으므로 어떻게 든 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 

물론, 장고는 다음과 같은 SQL을 생성