4

을 변경하지 않고 추상 기본 클래스에서 상속 :변경 모델 나는이처럼 보이는 제품에 대한 간단한 모델이 DB

class Product(models.Model): 
    name = models.CharField(max_length=80) 
    # other attributes 

우리는 이미이 출시가 있고,이 분야와 DB를 가지고는 작성 .

class BaseProduct(models.Model): 
    name = models.CharField(max_length=80) 

    class Meta(object): 
     abstract = True 

을 그리고 같은 제품 클래스를 수정 : I는 기본 클래스에서 상속이 모델을 변경하려면, 그것은 다음과 같습니다 추상 기본 클래스에 대한 이해를 바탕으로

class Product(BaseProduct): 
    # other attributes 

,이 두 가지 설정은 동일한 테이블을 만듭니다 (맞습니까?). 기술적으로,이 모델을 변경 한 후에는 데이터베이스를 수정하지 않아도됩니다. 그러나 South를 사용하여 적용하려고하면 Product 테이블의 'name'열을 삭제하려고합니다.

이미 이러한 테이블이 준비되어 있으므로 다른 솔루션 (예 : OneToOneField)을 사용하는 것과 반대되는 '이름'열을 유지하는 것이 이상적입니다.

감사합니다.

+0

동일한 열을 유지하고 동작 만 재정의 하시겠습니까? – J0HN

+0

Django에 대한 저 코드는 저에게 잘 보입니다 - 두 버전 모두에서'manage.py sql'의 출력이 똑같이 보입니까? 나는 남쪽에서 혼란스러워하는 것으로 의심한다. 아마도 관련이있다 : http://stackoverflow.com/questions/7108899/using-django-south-to-move-from-concrete-inheritance-to-abstract-inheritance –

+0

나에게 생성 된 schemeemigration을 보여 줌 – lalo

답변

0

Django에서 동일한 이름의 모델 필드를 재정의 할 수 없으므로 South 클래스에서 'name'필드를 자식 클래스에서 삭제해야하는 이유가 있습니다. 자세한 내용은 https://docs.djangoproject.com/en/dev/topics/db/models/#field-name-hiding-is-not-permitted을 참조하십시오.

각 행의 기존 이름을 내 보낸 다음 업데이트 된 테이블에 다시 매핑해야 할 수 있습니다 (행 ID를 키로 사용하여).

관련 문제