Как правильно вызвать модал из views.py в Django? - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь добавить модал, который запрашивает у пользователя данные для обновления поля в базе данных. Я пытался использовать 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">&times;</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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...