2016-10-18 12 views
0

Djangoフォームで、私は奇妙なpythonの動作に遭遇しました。私はいくつかの既存のデータを取り入れるモデル形式を持っています。 1つのフィールドはカンマで区切られたm2mフィールドのリストであるため、個別に初期化する必要があります。作成時にモデルフォームの初期化を防止する

class SomeModel(models.Model): 
    confirming_stuff = models.ManyToManyField(OtherModel,related_name='confirming') 

    def get_confirming(self): 
    return ','.join([l.pmid for l in self.confirming_stuff.all()]) 

class SomeForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(SomeForm, self).__init__(*args, **kwargs) 
     self.initial['confirming_field'] = self.instance.get_confirming() 

アップデートですべてうまく動作します。フィールドには、コンマで区切られたエントリが期待どおりに入力されます。問題は作成時に発生します。インスタンスがまだ存在しないため、フィールドでデータを埋め込むことができないため、この手順をスキップしようとしました。しかし、それは動作しません。代わりに、私はPythonコードの奇妙な動作に遭遇しました。

class SomeForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(SomeForm, self).__init__(*args, **kwargs) 
     if self.instance: 
      print "Self instance: ",self.instance 
      self.initial['some_field'] = self.instance.get_some_field() 

が同じエラーを生成します。なし

私は他のいくつかの論理式を試してみました

if self.instance != None: 
if not self.instance == None: 
if self.instance > 0: 

が、結果は同じまま:

自己インスタンス:さらにデバッグ画面のプリントアウトを示していません。

なぜインスタンスは「なし」として印刷されますが、そのように正しくテストすることはできません。

+0

お試しください。if hasattr(self、 'instance') ' – Sagar

答えて

3

あなたは常にinstanceオブジェクトを持っています。保存されているかどうかを確認してください。

if self.instance.id: 
    #do stuff 

ありがとうございました。

+0

ありがとうございます。それは動作します。 – user1491229

関連する問題