我有一个Django表单向导,可以很好地为我的一个模型创建内容。我想使用相同的向导来编辑现有内容的数据,但找不到一个很好的例子来说明如何编辑。在
以下是我的项目代码的简化版本:
在表单.py在
class ProjectEssentialsForm(forms.ModelForm):
class Meta:
model = Project
fields = [
'title',
'short_description',
'who_description',
'problem_description',
'solution_description'
]
class ProjectYourInfoForm(forms.ModelForm):
class Meta:
model = Project
fields = [
'gender',
'location',
'post_code',
'sector',
]
在视图.py在
^{pr2}$在网址.py在
FORMS = [
('project_essentials', ProjectEssentialsForm),
('project_your_info', ProjectYourInfoForm),
]
urlpatterns = patterns('',
(r'^projects/add$', ProjectWizard.as_view(FORMS)),
)
我看到有一个函数https://docs.djangoproject.com/en/dev/ref/contrib/formtools/form-wizard/#django.contrib.formtools.wizard.views.WizardView.get_form_instance用于设置表单实例,但我不确定您将如何获得模型ID来进行这里的查找,以及代码的具体工作方式。在
最好提供一个代码示例或一个链接。在
谢谢, 皮特
我刚得到这个工作,所以将张贴的答案,以防它帮助别人。在
您可以传递要在其中编辑的项的ID网址.py像这样:
然后,您可以使用以下代码在
在视图.py公司名称:
^{pr2}$您需要将模型转换为dict,以便将其设置为初始数据。在
pxg的回答是不够的。正如eminbuíra saral所指出的,它创建了模型的一个新实例,而不是编辑它。而艾敏·布拉萨拉尔的回答,光靠自己是不够的。或者不要重写get_form_initial方法,也不要设置初始值,或者使用此答案中提供的实现。你应该这样组合他们的答案:
在网址.py公司名称:
(r'^projects/edit/(?P<project_id>[-\d]+)$', ProjectWizard.as_view(FORMS)),
在视图.py公司名称:
虽然pxg的get_form_initial版本实际上可以工作(只要您还添加get_form_instance覆盖),但无需查找实例、提取其数据和创建初始值字典。所有这些都是在初始化实例之前由ModelForm自动完成的。只需返回一个空的初始值字典,就可以得到更简单、更高效的代码。在
除了pxg的答案,get_form_instance应该是这样的,否则您不会编辑模型,而是创建一个新的实例:
相关问题 更多 >
编程相关推荐