27

Django ModelForm 构造函数中的 self.instance 是什么意思,我在哪里可以找到有关它的文档?

class MyModelForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyModelForm, self).__init__(*args, **kwargs)
        if self.instance:
        ...
4

3 回答 3

17

在 ModelForm 中,self.instance 派生自modelMeta 类中指定的属性。在这种情况下,您self显然是 ModelForm 子类的一个实例,而 self.instance 是(并且将在保存表单时没有错误)您指定的模型类的实例,尽管您在示例中没有这样做。

访问 self.instance in__init__可能不起作用,尽管在调用父母的__init__可能意愿之后这样做。此外,我不建议尝试直接更改实例。如果您有兴趣,请查看Github上的 BaseModelForm 代码。instance也可以在通过参数创建新表单时指定instance

于 2013-08-16T03:10:44.033 回答
12

你可以在 django 的网站上找到文档。

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-clean-method

只需在页面上搜索对“实例”的每个引用,您就会找到所需的内容。

# Load up an instance
my_poll = Poll.objects.get(id=1)

# Declare a ModelForm with the instance
my_form = PollForm(request.POST, instance=my_poll)

# save() will return the model_form.instance attr which is the same as the model passed in
my_form.save() == my_poll == my_form.instance
于 2013-08-16T03:03:46.437 回答
0

现在我们需要用更准确的方式进行检查,因为 self.instance 不能为 None(也许旧的方式检查仍然有效) https://github.com/django/django/blob/65e03a424e82e157b4513cdebb500891f5c78363/django/forms/models。 py#L302

    if self.instance.pk is not None: # or just if self.instance.pk

尝试 print(self.instance, type(self.instance), self.instance.pk) 可以发现: type is <class...> but self.instance is None

于 2021-12-01T13:10:13.367 回答