如何过滤/获取倒数第二个最近的记录以更新Django中的字段?

我有一个跟踪输入/离开时间的模型。我正在尝试添加约束以使数据更准确。当前,当有人“输入”时,它会创建一条记录,将时间保存在时间戳中,然后进行重定向。如果此人然后尝试再次输入,它将创建带有新时间戳记的新记录。

我现在要添加的是,如果此人的上一个条目没有退出时间戳,那么该记录(将是最近的条目的倒数第二个)将通过更新来标记将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)
canandasfu123 回答:如何过滤/获取倒数第二个最近的记录以更新Django中的字段?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3164378.html

大家都在问