Как отфильтровать / получить последнюю последнюю запись для обновления поля в Django? - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть модель, которая отслеживает время входа / выхода. Я пытаюсь добавить ограничения, чтобы сделать данные более точными. В настоящее время, когда кто-то «входит», он создает запись, сохраняет время в метке времени и затем перенаправляет. Если человек затем пытается войти снова, он создает новую запись с новой отметкой времени.

Что я пытаюсь добавить сейчас, так это то, что, если у человека есть предыдущая запись без отметки времени выхода, эта запись (которая будет второй последней записью) будет помечена путем обновления time_exceptions для поля 'N'.

В настоящее время все поля заменяются на 'N', независимо от того, есть ли выход или нет, как показано ниже.

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 EmployeeWorkAreaLog.objects.filter(Q(employee_number=emp_num)).count() > 1:
                EmployeeWorkAreaLog.objects.filter((Q(employee_number=emp_num) & Q(work_area=area) & Q(time_out__isnull=True)) & (Q(station_number=station) | Q(station_number__isnull=True))).update(time_exceptions='N')

            return HttpResponseRedirect(self.request.path_info)

Я попробовал следующее, но я получаю expected string or bytes-like object, и, хотя он все еще создает новую запись перед сбоем, он не обновляет time_exceptions второй до самой последней до N.

        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 EmployeeWorkAreaLog.objects.filter(Q(employee_number=emp_num) & Q(time_out__isnull=True) & Q(time_exceptions="")).count() > 1:
                recent = EmployeeWorkAreaLog.objects.filter(employee_number=emp_num, work_area=area, station_number=station, time_out__isnull=True).order_by('-time_in')[1]

                EmployeeWorkAreaLog.objects.filter((Q(employee_number=emp_num) & Q(work_area=area) & Q(time_in=recent) & Q(time_out__isnull=True)) & (Q(station_number=station) | Q(station_number__isnull=True))).update(time_exceptions='N')

            return HttpResponseRedirect(self.request.path_info)
...