2016-12-12 7 views
2

Заранее за вашу помощь. Внутри проекта mi у меня есть приложение, включающее модели, созданные из существующей базы данных. Поскольку эти таблицы администрируются администратором баз данных, они сохраняются как неуправляемые модели. Поскольку возможно, что нам требуется повторно генерировать модели из db из-за изменений в схеме, мы создали альтернативные прокси-модели для каждой из этих моделей, чтобы отделить часть, которой мы управляем, от того, чего у нас нет. Ниже вы можете увидеть пример, основанный на нашем текущем макете.Django 1.10 - команда makemigrations не обнаруживает изменения для неуправляемых моделей

В примере показана сгенерированная модель с FK на другую сгенерированную модель, соответственно прокси-модель имеет ссылку на не прокси-модель. Я прочитал дискуссию, указанную here, и попробовал некоторые из подходов, но ни один из них не работал для меня. Поэтому сейчас я пытаюсь обновить сгенерированную модель, указывая на прокси-сервер, который, как я думаю, не должен вызывать никаких проблем.

Как я уже видел, 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) 

ответ

0

Я сделал несколько изменений в моем коде, чтобы указать неуправляемые модели, которые изначально FK других неуправляемых моделей, для прокси-моделей. Ни одно из этих изменений не привело к созданию новой миграции, поэтому я предполагаю, что ожидаемое поведение в этом случае. Посмотрел на исходный код Django, но не смог определить место, где были обнаружены эти изменения. Наконец, когда я внес изменения в параметры Meta (например, упорядочивание) в прокси-моделях, Django фактически обнаружил изменения и создал новую миграцию.