擅长:python、mysql、java
<p>pxg的回答是不够的。正如eminbuíra saral所指出的,它创建了模型的一个新实例,而不是编辑它。而艾敏·布拉萨拉尔的回答,光靠自己是不够的。或者不要重写get_form_initial</em>方法,也不要设置初始值,或者使用此答案中提供的实现。你应该这样组合他们的答案:</p>
<p>在网址.py公司名称:</p>
<p><code>(r'^projects/edit/(?P<project_id>[-\d]+)$', ProjectWizard.as_view(FORMS)),</code></p>
<p>在视图.py公司名称:</p>
<pre><code>class ProjectWizard(SessionWizardView):
def get_form_initial(self, step):
if 'project_id' in self.kwargs:
return {}
return self.initial_dict.get(step, {})
def get_form_instance(self, step):
if not self.instance:
if 'project_id' in self.kwargs:
project_id = self.kwargs['project_id']
self.instance = Project.objects.get(id=project_id)
else:
self.instance = Project()
return self.instance
</code></pre>
<p>虽然pxg的<em>get_form_initial</em>版本实际上可以工作(只要您还添加<em>get_form_instance</em>覆盖),但无需查找实例、提取其数据和创建初始值字典。所有这些都是在初始化实例之前由ModelForm自动完成的。只需返回一个空的初始值字典,就可以得到更简单、更高效的代码。在</p>