python - 表单集验证的 Django 问题
问题描述
我是 django 的新手,并且一直在努力解决这个问题。一位同事编写了一个手动发布函数来验证 is_valid()=true,我正试图通过覆盖 formset_valid 函数来使用内置验证,但它永远不会有效。
我有这个model.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)
这个forms.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 中的所有字段都是必需的。
任何想法将不胜感激。我不知道去哪里诊断这个..
-将要
解决方案
推荐阅读
- java - GCP 机器映像 - 获取项目的映像列表
- css - 如何在 wordpress 主题中更改网站标题字体样式 Bizberg Consulting Dark
- javascript - 将id传递给jquery函数
- erlang - 了解 Erlang 列表理解生成器
- amazon-web-services - AWS 网络访问控制列表在哪个 OSI 层运行?
- python - 如何在 Tkinter 中将与 .trace 一起使用的输入字段设置为自动完成但所有字母都转换为小写
- c++ - C++ 重载运算符、常量参数还是按值传递?
- php - PHP 会话在 POST 请求中出错后终止
- python - PyCharm 中的类型检查类静态变量
- python - 意外线海龟模块