Django ModelForm 构造函数中的 self.instance 是什么意思,我在哪里可以找到有关它的文档?
class MyModelForm(ModelForm):
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
if self.instance:
...
在 ModelForm 中,self.instance 派生自model
Meta 类中指定的属性。在这种情况下,您self
显然是 ModelForm 子类的一个实例,而 self.instance 是(并且将在保存表单时没有错误)您指定的模型类的实例,尽管您在示例中没有这样做。
访问 self.instance in__init__
可能不起作用,尽管在调用父母的__init__
可能意愿之后这样做。此外,我不建议尝试直接更改实例。如果您有兴趣,请查看Github上的 BaseModelForm 代码。instance
也可以在通过参数创建新表单时指定instance
。
你可以在 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
现在我们需要用更准确的方式进行检查,因为 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