2014-07-14 5 views
0

중복 모델 필드로 인해 문제가 발생합니다 (웹 페이지를 실행할 때 appname_modelname 테이블이 없습니다). ./manage.py appname을 마이그레이션 할 때마다 "중복 입력란"이 표시됩니다. 제 models.py를 확인했는데 그 중 하나만있었습니다. 해당 중복 필드는 어떻게 삭제합니까? 내가하는 일에 상관없이 그렇게 보인다. 나는 시도했다 :장고의 중복 모델 필드

  • 남쪽 ./manage.py sqlclear을하는 응용 프로그램 폴더

  • 에서 마이그레이션 폴더를 삭제 데이터베이스

  • 을 삭제 한 후 dbshell에 south_migrationhistory 테이블을 삭제

  • ./manage.py schemamigration appname - 초기화, ./manage.py 이전 appname - 작성

아이디어가 부족합니다.

class Document(models.Model): 
    filename = models.CharField(max_length=255, blank=True, null=True, default=None) 
    identity = models.CharField(max_length=255, default=None, null=True) 
    user = models.ForeignKey(User, null=False) 
    user_id = models.IntegerField(User, null=True) 
    docfile = models.FileField(upload_to=_upload_path, storage=fs) # upload_to is a path inside the storage path 

    def get_upload_path(self,filename): 
     return str(self.user.id) + '/' + str(date.today()) + '/' + filename 
+0

중복 필드 오류가 발생하는 모델을 게시하십시오. – Pawan

+0

Ok OP 편집을 마쳤습니다. Duplicate is user_id – KSHMR

+0

왜 user_id가 필요한 것 같습니까? user와 user_id는 모두 같은 필드입니다. – Pawan

답변

-1

확실하지하지만 문제는이 두 라인

user = models.ForeignKey(User, null=False) 
user_id = models.IntegerField(User, null=True) 

더 나은 데이터베이스 "사용자"에서와 같이 중복 오류를 방지하기 위해 "관련 이름"속성을 사용하는 여기에 원인이 USER_ID로 추가됩니다.

user = models.ForeignKey(User, related_name="id_user") # Change the related field as your convenience 
user_id = models.IntegerField(null=True, related_name="user_id") 

확인이 당신의 문제를 해결하는 경우

5

당신은이 작업을 수행 할 수 있으며, 사용자 외래 키 위해, 장고 ORM이 user_id라는 이름의 데이터베이스 필드를 생성합니다 (당신의 외래 키 필드 이름과 _id)를 사용하는 그것은 데이터베이스에서 FK로.

이 필드를 직접 만들 필요는 없지만 필요한 경우에도 user 또는 user_id의 이름을 변경하십시오. the documentation에서

: 장면 뒤에

는, 장고의 데이터베이스 열 이름을 만들 필드 이름에 "_id"를 추가합니다. 위의 예에서 Car 모델의 데이터베이스 테이블은 manufacturer_id 열을 갖습니다. (db_column을 지정하여이를 명시 적으로 변경할 수 있습니다.) 그러나 사용자 정의 SQL을 작성하지 않으면 코드가 데이터베이스 열 이름을 처리하지 않아도됩니다. 항상 모델 객체의 필드 이름을 다룰 것입니다.