我正在使用django-taggit库来表示“问题”字段。在模型中将其设置为blank = True。当我尝试提交此表单时,如果在多选字段中选择了一个或多个问题,则效果很好,但如果该字段未选择任何内容,则不会提交。问题在于它甚至不会引发错误或未在视图代码中出现断点,因此我无法对其进行调试以找出问题所在。有什么想法吗?
Django Form类:
class CreateJob(ModelForm):
def __init__(self, *args, **kwargs):
selected_questions = kwargs.pop('selected_questions')
super(CreateJob, self).__init__(*args, **kwargs)
self.initial['questions'] = selected_questions
questions = ModelMultipleChoiceField(queryset=Tag.objects.all())
class Meta:
model = Job
fields = ('name', 'description', 'skills_required', 'submission_deadline',
'participation_ends', 'tagged_freelancers', 'assigned_freelancer',
'questions')
widgets = {
'submission_deadline': DateInput(attrs={'data-provide': 'datepicker'}),
'participation_ends': DateInput(attrs={'data-provide': 'datepicker'})
}
Django视图:
def job_edit(request, job_id, template_name='projects/job_create.html'):
job = get_object_or_404(Job, pk=job_id)
job_form = CreateJob(request.POST or None, instance=job, selected_questions=job.questions.all())
if job_form.is_valid():
job_form.save()
return redirect('job_board')
return render(request, template_name, {'job_form': job_form, 'is_new': False})
HTML模板:
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-sm-8">
<div class="mb-3 text-left">
{% if is_new %}
<h1>New Job</h1>
{% else %}
<h1>Update Job</h1>
{% endif %}
</div>
<form method="post" class="form">
{% csrf_token %}
{% bootstrap_field job_form.name %}
{% bootstrap_field job_form.description %}
{% bootstrap_field job_form.skills_required %}
{% bootstrap_field job_form.submission_deadline %}
{% bootstrap_field job_form.participation_ends %}
{% bootstrap_field job_form.tagged_freelancers %}
{% bootstrap_field job_form.assigned_freelancer %}
{% bootstrap_field job_form.questions %}
{% bootstrap_button "Submit" button_type="submit" button_class="btn-secondary" %}
</form>
</div>
</div>
</div>