Снимок экрана приложения У меня есть следующая Django Модель для системы подачи заявления сотрудника. Сотрудники предоставляют данные по всем полям, кроме последнего - оставьте_сечение. Входные данные для решения об отпуске поступают от менеджера сотрудника.
Models.py
class LeaveTransactionLog(models.Model):
empno = models.ForeignKey(Employee,related_name='ltl_empno',on_delete=models.PROTECT)
approver_mgrno = models.IntegerField(default=0)
applied_year = models.IntegerField(default=2019)
applied_date = models.DateTimeField(auto_now_add=True)
leave_type = models.CharField(max_length=2,choices=leave_choices,default='PL')
leave_start_date = models.DateField()
leave_end_date = models.DateField()
leave_days = models.IntegerField(default=0)
leave_decision = models.CharField(max_length=2,choices=decision_choices,default='ES')
Я пытаюсь создать форму Django, которая будет отображать все листы, ожидающие одобрения для конкретного менеджера. Поскольку я хочу, чтобы менеджер видел все строки, ожидающие его одобрения одновременно, отображение построено с использованием таблицы HTML следующим образом.
Файл шаблона
{% extends 'base.html' %}
{% block title %} Approve/Reject/Escalate Employee Leave Applications {% endblock %}
{% block body %}
<h2 align="center"> Approve/Reject/Escalate Employee Leave Applications </h2>
<a href = "{% url 'home' %}" class="home_from_ApproveLeaves"> Back To Homepage </a>
{% block content %}
<form action="{% url 'ApproveRejectEscalateForm' %}" method="post" novalidate>
{% csrf_token %}
<table class="LeaveTable" align="center">
<thead class="LeaveTableHead">
<tr>
<th> Employee Number </th>
<th> Employee Name </th>
<th> Deptno </th>
<th> Department Name </th>
<th> Leave Type </th>
<th> Start Date </th>
<th> End Date </th>
<th> # of days </th>
<th> Applied on Date </th>
<th> Approving MgrNo </th>
<th> Decision </th>
</tr>
</thead>
<tbody>
{% for lev in leaves %}
<tr>
<td name="empno"> {{lev.empno}} </td>
<td> Employee Name </td>
<td> Deptno </td>
<td> Dept Name </td>
<td name="leave_type"> {{lev.leave_type}} </td>
<td name="lsd"> {{lev.leave_start_date}} </td>
<td name="led"> {{lev.leave_end_date}} </td>
<td name="ld"> {{lev.leave_days}} </td>
<td name="lad"> {{lev.applied_date}} </td>
<td name="lam"> {{lev.approver_mgrno}} </td>
<td name="leave_descision">
<input type="hidden" name="decision_choice">
<select>
<option value="AP"> Approve Leave </option>
<option value="ES"> Escalate Leave </option>
<option value="RJ"> Reject Leave </option>
</select>
</input>
</td>
</tr>
{% endfor %}
</tbody>
<input type="submit" value="Submit" />
</table>
</form>
{% endblock %}
{% endblock %}
Views.py
Следующее представление визуализирует исходную форму с помощью метода get () ClassBasedView. Метод Post пытается прочитать все значения, отображаемые в форме, которые были взяты из базы данных, кроме одного поля (exit_decision), которое будет введено менеджером сотрудника.
class ApproveRejectEscalateFormView(View):
def get(self, request):
leaves_formset = modelformset_factory(LeaveTransactionLog,fields=('empno','approver_mgrno','applied_year','leave_type','leave_start_date','leave_end_date','leave_days','leave_decision'))
leaves_formset = ApproveRejectEscalateForm(data=LeaveTransactionLog.objects.all())
leaves = LeaveTransactionLog.objects.all()
return render(request,'ApproveRejectEscalateForm.html',{'leaves':leaves,'form':leaves_formset})
def post(self,request):
responseformset = ApproveRejectEscalateForm(request.POST)
if responseformset.is_valid():
print('Form valid !')
formdata = responseformset.cleaned_data
iteration = 1
for f in responseformset:
print('Employee details :',iteration)
print('Employee number :',formdata.empno)
iteration = iteration + 1
else:
print('Form Invalid !')
print(responseformset.errors)
print(responseformset.non_field_errors())
return render(request, 'LeaveApplicationhome.html')
** Однако когда Форма отправлена is_valid () всегда возвращает отрицательный. Причина в том, что форма представляется пустой. Form.errors () показывает это ...
Форма недействительна!
empno Это поле обязательно для заполнения. Approver_mgrno Это поле необходимо заполнить d. apply_year Это поле необходимо заполнить d. оставлять_тип Это поле обязательно к заполнению. листьями_старт_даты Это поле является обязательным для заполнения. листьями_данных_дата Это поле необходимо заполнить. листьями_дней Это поле является обязательным для заполнения. листьями_разрешением Это поле обязательно для заполнения.
**
Причина в том, что данные в пределах HTML теги не отправляются на POST. Это известно. Этот тег также использовался с опцией «hidden», предоставляя набор данных как {{left.empno}} и т. Д. Кроме того, пробовал метод formsets
, но безуспешно. form.as_table
тоже не сработало.
Вопрос в том, как мне отобразить Django данные модели в настроенном табличном формате HTML с одним полем в строке, запрашивающим ввод, и я должен иметь возможность обрабатывать все значения полей после POST.