我是django的新手,一直在梳理这支头发。一位同事编写了一个手动过帐函数,该函数验证is_valid()= true,而我正试图通过覆盖formset_valid函数来使用内置验证,但是它永远无效。
我有这个模型。py:
class Assignment(PACSModel):
course_id = models.IntegerField(unique = False)
assignment_number = models.IntegerField(unique = False)
assignment_name = models.CharField(max_length = 100)
start_date = models.CharField(max_length = 10)
due_date = models.CharField(max_length = 10)
end_date = models.CharField(max_length = 10)
这是form.py:
class AssignmentDatesForm(forms.ModelForm):
class Meta:
model = Assignment
fields = [
'assignment_number',
'assignment_name',
'start_date',
'due_date',
'end_date',
]
widgets = { 'assignment_name' :forms.TextInput(attrs={'readonly':'readonly', 'class' : 'grey-text', 'size' : '25'}),
'start_date' : forms.DateInput(format = '%m/%d/%Y', attrs ={ 'class' : 'datepicker'}),
'due_date' : forms.DateInput(format = '%m/%d/%Y', attrs ={ 'class' : 'datepicker' }),
'end_date' : forms.DateInput(format = '%m/%d/%Y', attrs ={ 'class' : 'datepicker' }),}
class Media:
css = {'assignment_name': ('changeDates.css',)}
AssignmentDatesFormSet = forms.modelformset_factory(
model = Assignment,
form = AssignmentDatesForm,
extra = 0,
)
手动遍历表单以显示:
<table class = "table table-striped table-condensed table-hover">
<thead >
<tr>
<th>Assignment Number</th>
<th>Assignment Name</th>
<th>Start Date</th>
<th>Due Date</th>
<th>End Date</th>
</tr>
</thead>
<tbody>
{% for t in form %}
<tr>
<td>{{ t.assignment_number }}</td>
<td class = "inputA">{{ t.id }} {{ t.assignment_name }}</td>
<td>{{ t.start_date }}</td>
<td>{{ t.due_date }}</td>
<td>{{ t.end_date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
最后,该视图是ModelFormSetView之上的一个类,在该类中,我具有此简单的post函数来仅测试验证:
def post(self, request, course_id, *args, **kwargs):
logging.warning("In Post with course_id: " + course_id)
formset = AssignmentDatesFormSet(request.POST)
if formset.is_valid():
logging.warning("Formset Saved")
formset.save()
logging.warning(vars(formset))
return super(EditDueDates, self).post(request, course_id, *args, **kwargs)
这是一个简单的表单集,每个表单都是一个分配,用户可以在其中更改日期(开始日期,截止日期,结束日期)。
我只是想让它进行验证,因此它将调用formset_valid,并且可以进行保存/后期处理。但是每次我收到每种形式的错误:
<ul class="errorlist"><li>id<ul class="errorlist"><li>Select a valid choice. That choice is not one of the available choices.</li></ul></li></ul>
我一点都不明白。 vars(formset)转储具有一个隐藏的form-0-id输入字段,该字段具有id(pk)设置。我不明白为什么它不会说它是有效的。
更令人困惑的是,一个同事让它可以工作几乎完全相同的事情,而且他不必包括Assignment_number字段。它不需要显示,但是如果我在那里没有显示,则会显示错误消息,要求将其包含在内。我们的表是相同的,并且pgsql中的所有字段都是必需的。
任何想法都将不胜感激。我不确定该去哪里诊断。
-将