2016-12-12 13 views
2

ご協力いただきありがとうございます。 miプロジェクトの中には、既存のデータベースから生成されたモデルを含むアプリケーションがあります。これらの表はDBAによって管理されるため、管理対象外のモデルとして保持されます。スキーマの変更によりdbからモデルを再生成する必要がある可能性があるため、管理している部分とそれ以外の部分を切り離すために、それぞれのモデルに対して代用プロキシモデルを作成しました。下に、現在のレイアウトに基づいた例があります。Django 1.10 - makemigrationsコマンドでアンマネージドモデルの変更が検出されない

この例では、生成された別のモデルとFKで生成されたモデルを示しているため、プロキシモデルには非プロキシモデルへの参照があります。私はhereと指摘された議論を読んだが、示されたアプローチのいくつかを試みたが、誰も私のために働いていなかった。だから私はプロキシを指すように生成されたモデルを更新しようとしていますが、これは問題を起こさないはずです。

Djangoがアンマネージドモデルのマイグレーションを生成したのを見てきましたが、マイグレーションはそのモデルのFKの変化を検出すると考えました。しかし、manage.py 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は実際に変更を検出し、新しい移行を作成しました。

関連する問題