2016-06-27 3 views
1

python manage.py migrate 계정을 실행할 때마다 오류 코드가 표시됩니다. django.db.utils.IntegrityError : accounts_userinfo.user_id가 아닌 경우 NULL이 될Django에서 마이그레이션을 실행할 때 accounts_userinfo.user_id가 NULL이 아님

나는 이것이 더 많은 사용자 정보를 가진 모델을 django 사용자 모델과 연결 시켜서 발생한다고 생각합니다. 이 내 models.py입니다

class UserInfo(models.Model): 
    c_name = models.CharField(max_length=120) 
    c_site = models.CharField(max_length=120) 
    link = models.ForeignKey(User) 

사람이 내가 누락 될 수 있습니다 명백한 문제를 볼 수 있습니까? 더 많은 코드가 필요하면 알려주십시오. 감사합니다. -Ramsey

답변

2

외래 키는 기본적으로 null 일 수 없습니다.

class UserInfo(models.Model): 
    c_name = models.CharField(max_length=120) 
    c_site = models.CharField(max_length=120) 
    link = models.ForeignKey(User, null = True) 

을 또는 기본 설정 : 당신이 중 하나가 널 (NULL) 내리는 데 필요한 link이 필요한 경우

class UserInfo(models.Model): 
    c_name = models.CharField(max_length=120) 
    c_site = models.CharField(max_length=120) 
    link = models.ForeignKey(User, default = some_id) 

이가 달려됩니다. 가능성이 높다.

데이터베이스에이 필드의 값이없는 기존 데이터 (link)가 있고 Django가 인 이 될 수 없기 때문에 이러한 현상이 발생합니다. 또 다른 옵션은 UsersUserInfo 테이블의 모든 항목을 제거한 다음 (데이터가 생성되지 않은 것으로 가정하고) 마이그레이션하는 것입니다.

을 작동 시키려면 기존 사용자 모델 중 하나를 기본값으로 설정하고 장고 관리자 패널로 이동하여 항목을 수정하십시오. 이 문제는 다른 데이터베이스에없는 ID (즉, 1)를 지정해야한다는 것입니다. 그러나 이것이 여전히 개발 중이며 실제 데이터가 마이그레이션되지 않는다면 문제가 없습니다.

마지막 옵션은 먼저 null 허용으로 설정 한 다음 데이터로 이동하여 모든 항목을 작성한 다음 다른 마이그레이션을 작성하여 null 가능 속성을 제거하는 것입니다.

+0

답변 감사합니다. 기존의 사용자 모델을 정확히 어떻게 설정합니까? 나는 데이터베이스에서 아무 것도 중요하지 않아 모든 것을 없애 버렸지 만 문제는 여전히 발생하고 있습니다. 기본값 =로 설정해야하는 항목은 무엇입니까? 도움을 주셔서 감사합니다. –

+0

흠, _everything_을 보지 않고 말할 수 없습니다. 마이그레이션이 실행되는 순서와 관련이있는 것으로 보입니다. 어떤 데이터베이스를 사용하고 있습니까? 데이터베이스를 완전히 삭제하고 migrate 명령을 다시 실행하려고 시도 했습니까? –

+0

그 외에도 실패한 마이그레이션을 삭제하고 'null = True'로 설정 한 다음 다른 마이그레이션을 생성하는 것이 좋습니다. 문제가 해결되는지 적어도 확인하십시오. 기본값을 데이터베이스에있는 모든 사용자의 ID로 설정할 수 있습니다. 그것은 단지 정수입니다. –

관련 문제