2016-07-02 2 views
1

다음과 같이 사용자 모델을 UserProfile 모델로 확장하고 있습니다.Python Django OneToOneField Nullable 값

class UserProfile(models.Model): 
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) 

TYPE0 = 0 
TYPE1 = 1 
PROFILE_TYPE_CHOICES = (
    (TYPE0, "Old"), 
    (TYPE1, "New"), 
) 
profile_type = models.PositiveSmallIntegerField(choices=PROFILE_TYPE_CHOICES) 

이 부분 코드는 오류없이 정상적으로 작동합니다.

You are trying to add a non-nullable field 'user_profile' to type0user without a default; we can't do that (the database needs something to populate existing rows). 

내가 makemigrations를하려고하면이 후

, 나는 더 그것은 오류가 발생이 시점에서 다음과 같이

class Type0User(models.Model): 
user_profile = models.OneToOneField(UserProfile, on_delete=models.CASCADE, primary_key=True) 

UserProfile 모델을 확장하고자합니다.

아무도 왜 이런 일이 발생하고 어떻게 해결할 수 있는지 설명해주십시오. 또한 UserProfile 모델을 확장하는 동기는 Type0UserType1User에 대한 두 개의 개별 모델을 원하기 때문입니다. 나는 데이터베이스 디자인을 처음 사용하기 때문에, 내가 취하고있는 접근법이 최선의 방법이 아니라면 지적 해주십시오. 감사와 정말로 귀하의 도움과 조언을 주셔서 감사합니다!

답변

0

데이터베이스에 기존 Type0User 행이있는 것으로 보입니다. 새 열이 추가 될 때이 열은 채울 수 있도록 기본값이 있어야합니다.

두 가지 종류의 사용자를 지원하도록 디자인을 확장하는 경우 기존 UserProfile 모델에 필드를 추가하여 두 유형을 구분하는 것이 좋습니다.

+0

안녕하세요, 귀하의 첫 번째 지점이 유효하다고 생각합니다. 해당 테이블에 행을 추가하지 않았습니다. 어쨌든 구형 모델을 완전히 덮어 쓸 수 있습니까? Type0User 모델이 훨씬 나중에 수정 되었기 때문입니다. 요점은, 실제로 내가하려는 일입니다. 두 개의 서로 다른 사용자 프로필은 고유 한 필드를 가질 것이므로 두 개의 별도 모델을 만들어 UserProfile 모델을 통해 User 모델에 연결해야합니다. 그게 합리적인 일인가요? – swdon

+0

데이터베이스에서 데이터를 지우기 만하면됩니다. – navit

+0

실제로 어떤 데이터도 볼 수 없기 때문에 문제가 발생합니다 ... – swdon

관련 문제