Я пытаюсь добавить модал, который запрашивает у пользователя данные для обновления поля в базе данных. Я пытался использовать https://github.com/trco/django-bootstrap-modal-forms/blob/master/README.rst в качестве справочного материала для создания этого модального обновления, но у меня возникают проблемы с его правильным вызовом на основе идентификатора пользователя "id / employee_number".
Способ, которым это должноработа заключается в том, что при отправке формы в views.py существует логика, которая либо помечает текущую запись в базе данных, либо создает новую. Я пытаюсь добиться того, чтобы всякий раз, когда отправка помечалась, этот модал всплывал и запрашивал у пользователя оценку времени, которое, по их мнению, он вошел или покинул область.
В чем мне нужна помощь, так это в том, как вызвать модал из представлений (куда я положил комментарий), или какой может быть способ приблизиться к этому решению, которого я пытаюсь достичь? Отмеченная часть логики работает, но я не уверен, как вызвать этот мод, чтобы он отображался только тогда, когда от пользователя требуется поле "edited_timestamp".
views.py
class EnterExitArea(CreateView):
model = EmployeeWorkAreaLog
template_name = "operations/enter_exit_area.html"
form_class = WarehouseForm
def form_valid(self, form):
emp_num = form.cleaned_data['employee_number']
area = form.cleaned_data['work_area']
station = form.cleaned_data['station_number']
if 'enter_area' in self.request.POST:
form.save()
EmployeeWorkAreaLog.objects.filter((Q(employee_number=emp_num) & Q(work_area=area) & Q(time_out__isnull=True) & Q(time_in__isnull=True)) & (Q(station_number=station) | Q(station_number__isnull=True))).update(time_in=datetime.now())
# If employee has an entry without an exit and attempts to enter a new area, mark as an exception 'N'
if EmployeeWorkAreaLog.objects.filter(Q(employee_number=emp_num) & Q(time_out__isnull=True) & Q(time_exceptions="")).count() > 1:
first = EmployeeWorkAreaLog.objects.filter(employee_number=emp_num, time_out__isnull=True).order_by('-time_in').first()
EmployeeWorkAreaLog.objects.filter((Q(employee_number=emp_num) & Q(time_out__isnull=True))).exclude(pk=first.pk).update(time_exceptions='N')
# Here's where the modal would need to be called because the record was flagged
return HttpResponseRedirect(self.request.path_info)
class EditedTimestampUpdate(BSModalUpdateView):
template_name = 'operations/modals/update_edited_timestamp.html'
form_class = WarehouseForm
success_url = reverse_lazy('enter_exit_area')
urls.py
urlpatterns = [
url(r'enter-exit-area/$', EnterExitArea.as_view(), name='enter_exit_area'),
path('update/', views.EditedTimestampUpdate.as_view(), name='update_timestamp'),
]
models.py
class EmployeeWorkAreaLog(TimeStampedModel, SoftDeleteModel, models.Model):
employee_number = models.ForeignKey(Salesman, on_delete=models.SET_NULL, help_text="Employee #", null=True, blank=False)
work_area = models.ForeignKey(WorkArea, on_delete=models.SET_NULL, null=True, blank=False, help_text="Work Area", related_name="work_area")
station_number = models.ForeignKey(StationNumber, on_delete=models.SET_NULL, null=True, help_text="Station", related_name="stations", blank=True)
edited_timestamp = models.DateTimeField(null=True, blank=True)
time_exceptions = models.CharField(max_length=2, blank=True)
time_in = models.DateTimeField(help_text="Time in", null=True, blank=True)
time_out = models.DateTimeField(blank=True, help_text="Time out", null=True)
def __str__(self):
return self.employee_number
форм. py
class WarehouseForm(AppsModelForm):
class Meta:
model = EmployeeWorkAreaLog
widgets = {
'employee_number': ForeignKeyRawIdWidget(EmployeeWorkAreaLog._meta.get_field('employee_number').remote_field, site, attrs={'id':'employee_number_field'}),
}
fields = ('employee_number', 'work_area', 'station_number')
enter_exit_area.html
{% extends "operations/base.html" %}
{% block main %}
{% include "operations/modals/_modal.html" %}
<form id="warehouseForm" action="" method="POST" novalidate >
{% csrf_token %}
<!-- Here is just the form fields -->
<div>
<div>
<button type="submit" name="enter_area" value="Enter">Enter Area</button>
<button type="submit" name="leave_area" value="Leave">Leave Area</button>
</div>
</div>
</form>
<script type="text/javascript">
$(function () {
// Update book buttons
$(".update-timestamp").each(function () {
$(this).modalForm({formURL: $(this).data('id')});
});
});
</script>
{% endblock main %}
update_edited_timestamp.html
<form method="post" action="">
{% csrf_token %}
<div class="modal-header">
<h5 class="modal-title">Time correction</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
{{ form.edited_timestamp }}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="submit-btn btn btn-primary">Submit</button>
</div>
</form>
thisпо ссылке выше
_modal.html
<div class="modal fade" tabindex="-1" role="dialog" id="modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
</div>
</div>
</div>