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:
が、結果は同じまま:
自己インスタンス:さらにデバッグ画面のプリントアウトを示していません。
なぜインスタンスは「なし」として印刷されますが、そのように正しくテストすることはできません。
お試しください。if hasattr(self、 'instance') ' – Sagar