미리 도움을 주셔서 감사합니다. 마일 프로젝트 내 기존 데이터베이스에서 생성 된 모델을 포함하는 응용 프로그램이 있습니다. 이러한 테이블은 DBA에서 관리하므로 관리되지 않는 모델로 유지됩니다. 스키마 변경으로 인해 db에서 모델을 다시 생성 할 필요가있을 수 있으므로 각 모델에 대해 대체 프록시 모델을 작성하여 관리하지 않는 부분과 그렇지 않은 부분을 분리합니다. 아래에서 현재 레이아웃을 기반으로 한 예를 볼 수 있습니다.장고 1.10 - makemigrations 명령으로 관리되지 않는 모델의 변경 내용을 감지하지 못합니다.
이 예에서는 생성 된 모델과 생성 된 다른 모델을 FK로 표시하므로 프록시 모델에는 비 프록시 모델에 대한 참조가 있습니다. 나는 here을 가리키는 토론을 읽고 표시된 접근법 중 일부를 시도했다. 그러나 그들 중 누구도 나를 위해 일하지 못했다. 그래서 지금은 생성 된 모델을 프록시 1을 가리 키도록 업데이트하려고합니다. 프록시는 문제를 야기해서는 안된다고 생각합니다.
Django가 관리되지 않는 모델의 마이그레이션을 생성 한 것을 보았으므로 makemigration이 해당 모델의 FK 변경을 감지 할 것이라고 생각했습니다. 그러나 manage.py makemigrations
을 실행하면 변경 사항이 발견되지 않았 음을 알 수 있습니다. 관리되지 않는 모델에 대한 makemigrations의 예상되는 동작입니까?
# app/models.py
class SacLocation(models.Model):
sacloc_location_id = models.IntegerField(primary_key=True)
sacloc_name = models.CharField(max_length=50, blank=True, null=True)
sacloc_state = models.IntegerField(blank=True, null=True)
# I'm changing this Field to point to the proxy model
# e.g. it will look like this, but the change is not detected by makemigrations
# sacloc_location_grouping = models.ForeignKey('LocationGroupingProxy',
# models.DO_NOTHING, db_column='sacloc_location_grouping')
sacloc_location_grouping = models.ForeignKey('SacLocationGrouping',
models.DO_NOTHING, db_column='sacloc_location_grouping')
class Meta:
managed = False
db_table = 'sac_location'
class SacLocationGrouping(models.Model):
saclgr_location_grouping__id = models.IntegerField(primary_key=True)
saclgr_name = models.CharField(max_length=50, blank=True, null=True)
class Meta:
managed = False
db_table = 'sac_location_grouping'
class LocationProxy(SacLocation):
class Meta:
proxy = True
def __str__(self):
return u'%s' % (self.sacloc_name)
class LocationGroupingProxy(SacLocationGrouping):
class Meta:
proxy = True
def __str__(self):
return u'%s' % (self.saclgr_name)