【发布时间】:2021-02-22 21:49:55
【问题描述】:
我已经为我拥有的模型制作了模型表单,我无法直接将数据保存到模型,因为我有一个自定义格式日期字段,只能在 forms.py 中使用forms.DateField(input_formats=settings.DATE_INPUT_FORMATS) 制作,但由于某种原因数据我正在解析视图并没有保存在模型中。
views.py
def applications_view(request):
if request.user.is_superuser:
applications = LeaveApplication.objects.all()
if request.method == "POST":
id = request.POST.get('applications_id')
user = request.POST.get('applications_user')
reason = request.POST.get('applications_reason')
from_date = request.POST.get('applications_from_date')
to_date = request.POST.get('applications_to_date')
if request.POST.get('approve'):
something = LeaveList(user=user, reason=reason, from_date=from_date,
to_date=to_date, leave_status='Approve')
leave_list_form = LeaveListForm(request.POST, instance=something)
if leave_list_form.is_valid():
leave_list_form.save()
elif request.POST.get('deny'):
something = LeaveList(user=user, reason=reason, from_date=from_date,
to_date=to_date, leave_status='Denied')
leave_list_form = LeaveListForm(request.POST, instance=something)
if leave_list_form.is_valid():
leave_list_form.save()
context = {
'applications': applications
}
return render(request, 'home/applications.html', context)
forms.py
class LeaveListForm(forms.ModelForm):
from_date = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS)
to_date = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS)
class Meta:
model = LeaveList
fields = [
'user',
'reason',
'from_date',
'to_date',
'leave_status'
]
我没有在模板上呈现带有上下文的表单,因为我正在循环来自另一个模型的数据,我在每个循环都呈现的隐藏类型输入的帮助下使用按钮再次获取这些数据。
<table style="width:100%">
<tr>
<th>Request ID</th>
<th>Employee</th>
<th>Reason for Leave</th>
<th>From Date</th>
<th>To Date</th>
<th>Approve/Deny</th>
</tr>
<tr>
<td>{{ applications.id }}</td>
<td>{{ applications.user }}</td>
<td>{{ applications.reason }}</td>
<td>{{ applications.from_date }}</td>
<td>{{ applications.to_date }}</td>
<td>
<form method="POST">
{% csrf_token %}
<input type="hidden" id="applications_id" name="applications_id" value="{{ applications.id }}">
<input type="hidden" id="applications_user" name="applications_user" value="{{ applications.user }}">
<input type="hidden" id="applications_reason" name="applications_reason" value="{{ applications.reason }}">
<input type="hidden" id="applications_from_date" name="applications_from_date" value="{{ applications.from_date }}">
<input type="hidden" id="applications_to_date" name="applications_to_date" value="{{ applications.to_date }}">
<input class="appproveButton appproveButtonYes" type="submit" name="approve" value="Approve">
<input type="submit" class="appproveButton appproveButtonNo"name="deny" value="Deny">
</form>
</td>
</tr>
</table>
【问题讨论】:
-
settings.DATE_INPUT_FORMATS 的格式是什么,你在 request.POST.get('applications_from_date') 中传递了什么?
-
@KasimSharif DATE_INPUT_FORMATS = ['%b. %d, %Y'],对于 'applications_from_date' 是 2021 年 2 月 24 日(示例)
-
为什么在保存之前
leave_list_form = LeaveListForm(request.POST, instance=something)这样做。此外,您的验证似乎很可能失败,这意味着您的save()永远不会被调用。您是否检查过表单是否通过验证? -
我认为
leave_list_form = LeaveListForm(request.POST, instance=something)会将数据保存在字段中。我之前遇到了验证错误,但在添加if leave_list_form.is_valid():之后就没有了,所以我认为表单正在通过验证。 -
没有。那不会保存数据。
something.save()会在验证通过时。将else:添加到您的if form.isvalid()并查看它是否通过。似乎不是。
标签: python django django-models django-views