Django 1.10 — команда makemigrations не обнаруживает изменения для неуправляемых моделей

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

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

Поскольку я видел, что 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)

person gaboroncancio    schedule 12.12.2016    source источник


Ответы (1)


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

person gaboroncancio    schedule 20.12.2016