我有一个Django表单向导,可以很好地创建我的一个模型的内容.我想使用相同的向导来编辑现有内容的数据,但无法找到如何执行此操作的良好示例.
这是我的项目代码的简化版本:
forms.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',
]
Run Code Online (Sandbox Code Playgroud)
views.py
TEMPLATES = {
'project_essentials': 'projects/essentials-form.html',
'project_your_info': 'projects/your-info-form.html',
}
class ProjectWizard(SessionWizardView):
instance = None
def get_form_instance(self, step):
"""
Provides us with an instance of the Project Model to save on completion
"""
if self.instance is None:
self.instance = Project()
return self.instance
def done(self, form_list, **kwargs):
"""
Save info to the DB
"""
project = self.instance
project.save()
def get_template_names(self):
"""
Custom templates for the different steps
"""
return [TEMPLATES[self.steps.current]]
Run Code Online (Sandbox Code Playgroud)
urls.py
FORMS = [
('project_essentials', ProjectEssentialsForm),
('project_your_info', ProjectYourInfoForm),
]
urlpatterns = patterns('',
(r'^projects/add$', ProjectWizard.as_view(FORMS)),
)
Run Code Online (Sandbox Code Playgroud)
我看到有这个函数https://docs.djangoproject.com/en/dev/ref/contrib/formtools/form-wizard/#django.contrib.formtools.wizard.views.WizardView.get_form_instance用于设置表单实例,但我不确定如何获取模型ID来进行查找以及代码如何工作.
一个代码示例或一个链接将是最受欢迎的.
谢谢,皮特
pxg*_*pxg 11
我刚刚完成了这项工作,所以如果能帮助别人,我会发布答案.
您可以在urls.py中传递您要修改的项目的ID,如下所示:
(r'^projects/edit/(?P<project_id>[-\d]+)$', ProjectWizard.as_view(FORMS)),
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下代码查找该项目
views.py:
class ProjectWizard(SessionWizardView):
def get_form_initial(self, step):
if 'project_id' in self.kwargs and step == 'project_essentials':
project_id = self.kwargs['project_id']
project = Project.objects.get(id=project_id)
from django.forms.models import model_to_dict
project_dict = model_to_dict(project)
return project_dict
else:
return self.initial_dict.get(step, {})
Run Code Online (Sandbox Code Playgroud)
您需要将模型转换为dict,以便将其设置为初始数据.
| 归档时间: |
|
| 查看次数: |
3525 次 |
| 最近记录: |