在创建

时间:2016-10-18 08:02:20

标签: python django initialization modelform

在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:

但结果仍然相同。

为什么实例打印为“无”但无法正确测试,这仍然是个谜。

1 个答案:

答案 0 :(得分:2)

您将始终拥有instance个对象,只需检查其是否已保存。

if self.instance.id:
    #do stuff

感谢。