在Django表单中,我遇到了一个奇怪的python行为。我有一个模型表单,我想填充一些现有的数据。因为一个字段是一个逗号分隔的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 :(得分:2)
您将始终拥有instance
个对象,只需检查其是否已保存。
if self.instance.id:
#do stuff
感谢。