2016-09-20 8 views
1

ジャンゴ1.10は、ここに私の列挙型のようなクラスの変更しますモデル:ジャンゴは必要ありません検出するには、3.5</p> <p>PY

type = models.TextField(choices=TransmissionType.choices(), db_index=True, default=None) 

th

operations = [ 
    migrations.AlterField(
     model_name='transmission', 
     name='type', 
     field=models.TextField(choices=[('TRANSMISSION_PROGRAM', 'TRANSMISSION_PROGRAM'), ('INFO_PROGRAM', 'INFO_PROGRAM'), ('SPORT_PROGRAM', 'SPORT_PROGRAM')], db_index=True, default=None), 
    ), 
] 

EDIT1:インク私は右のこのような現在のdjango deconstruct docsどうやらmakemigrationスクリプトはまだ作成毎回の移動に応じてすべてのものを作っ 期待される動作 - クラスのメンバーは

+0

そして、あなたは何を期待していますか? –

+0

私はちょうど私の期待について編集しました – jnowak

+0

この変更を行う前に、モデルはどのように見えましたか? – e4c5

答えて

2
AlterFieldを含めるべきではありません生成されたmigarationを変更しないとき

辞書には任意の順序があります。したがって、タプルには任意の順序もあります。特にPython 3.3以降では、random hash seedを使用しているため、注文が変わる可能性があります。そのため、タプルの順番も異なります。同じ項目の異なるタプルは同じ順序で比較されません。 Djangoはこの変更を検出し、新しい移行を作成します。この問題を解決するには

、単にタプルを構築する前にキーを並べ替える:

@deconstructible 
class EnumType(object): 
    @classmethod 
    def choices(cls): 
     attrs = [i for i in cls.__dict__.keys() if i[:1] != '_' and i.isupper()] 
     return tuple((cls.__dict__[attr], cls.__dict__[attr]) for attr in sorted(attrs)) 

    def __eq__(self, other): 
     return self.choices() == other.choices() 
+0

完璧、ありがとう!魅力のように動作します。 – jnowak

関連する問題