我正在使用Django Formtools为职位发布过程创建多步骤表单。在其中一种形式中,我有Job Questions,我希望用户动态添加它,比如说一个复选框,如果他们有兴趣添加问题,则会生成问题形式。他们应该有一个按钮来创建尽可能多的问题。现在的挑战是,当我使用常规模型表格时,我能够完成作业发布过程,但是如果我将问题表格替换为模型表格集并将其包含在form_list中,则会出现关键错误。
[第二,如果尝试动态添加字段(例如this stack overflow response)时遇到各种Java脚本响应,则会出现表单验证错误。只需提及,问题表单使用与其他表单(工作模型)相同的模型,因此我的期望是,无论添加多少问题,这些问题都将保存到工作模型中。有人知道该怎么做吗?在Django formtools中动态添加字段并将其保存到模型中?我的表单工具向导如下所示:
class JobWizard(SessionWizardView):
form_list=[JobForm7,JobForm1,JobForm2,JobForm3, JobForm4,JobForm5,JobForm6 ]
file_storage= FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'jobs'))
template_name="jobs/jobforms.html"
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
def done(self, form_list, form_dict, **kwargs):
form_dict = self.get_all_cleaned_data()
categories = form_dict.pop('categories')
sub_categories = form_dict.pop('sub_categories')
job_question = form_dict.pop('job_question')
print(job_question)
print("_________________________")
job=Job.objects.create(**form_dict)
job.categories=categories
job.job_question=job_question
for sub_category in sub_categories:
job.sub_categories.add(sub_category)
# for question in job_question:
# job.job_question.add(question)
job.save()
return redirect('job_list')
我的模型如下所示:
class Job(models.Model):
...#Other fields
# Form 4
job_question=models.CharField(max_length=20, default="")
# Form 5
job_freelancers_number=models.IntegerField(default=1)
因此我可以使用Django Dynamic Formset库来处理此问题。我所需要做的就是在STATIC_URL中创建jquery.formset.js,然后在jquery之后的模板中引用相同的内容。然后在我的模板 script>部分中,我在下面传递:
<script type="text/javascript">
$(function() {
$('#job-question').formset();
})