我有一个跟踪输入/离开时间的模型。我正在尝试添加约束以使数据更准确。当前,当有人“输入”时,它会创建一条记录,将时间保存在时间戳中,然后进行重定向。如果此人然后尝试再次输入,它将创建带有新时间戳记的新记录。
我现在要添加的是,如果此人的上一个条目没有退出时间戳,那么该记录(将是最近的条目的倒数第二个)将通过更新来标记将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)