Python 如何创建一个;入住/退房;有时间戳的系统?
我有一个类似于签入/签出方式的应用程序。人们只需输入他们的ID、区域,然后单击Checkin,它就会将时间戳和他们的信息发送到db。还有一个“签出”按钮,目前什么也不做。它的工作原理是,一旦用户填写表单并提交,它将执行以下操作之一:Python 如何创建一个;入住/退房;有时间戳的系统?,python,html,django,Python,Html,Django,我有一个类似于签入/签出方式的应用程序。人们只需输入他们的ID、区域,然后单击Checkin,它就会将时间戳和他们的信息发送到db。还有一个“签出”按钮,目前什么也不做。它的工作原理是,一旦用户填写表单并提交,它将执行以下操作之一: 根据输入的ID和区域查找上一个签入条目,并将签出从NULL更新为timestamp 如果该人员忘记以前签入,那么它将创建一个新记录,其中只包含签出时间戳和ID/区域 我认为通过匹配ID和区域来找到用户会更好,因为同一个人一天可以在不同区域签入/签出几次,因此仅通过I
class WorkArea(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class StationNumber(models.Model):
work_area = models.ForeignKey(WorkArea, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class EmployeeWorkAreaLog(TimeStampedModel, SoftDeleteModel, models.Model):
employee_number = models.IntegerField(max_length=50, help_text="Employee #", 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)
time_in = models.DateTimeField(auto_now_add=True, 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
class EnterExitArea(CreateView):
model = EmployeeWorkAreaLog
template_name = "operations/enter_exit_area.html"
form_class = WarehouseForm
def form_valid(self, form):
form.save()
return HttpResponseRedirect(self.request.path_info)
def load_stations(request):
work_area_id = request.GET.get('work_area')
stations = StationNumber.objects.filter(work_area_id=work_area_id).order_by('name')
return render(request, 'operations/station_number_dropdown_options.html', {'stations': stations})
forms.py
class WorkArea(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class StationNumber(models.Model):
work_area = models.ForeignKey(WorkArea, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class EmployeeWorkAreaLog(TimeStampedModel, SoftDeleteModel, models.Model):
employee_number = models.IntegerField(max_length=50, help_text="Employee #", 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)
time_in = models.DateTimeField(auto_now_add=True, 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
class EnterExitArea(CreateView):
model = EmployeeWorkAreaLog
template_name = "operations/enter_exit_area.html"
form_class = WarehouseForm
def form_valid(self, form):
form.save()
return HttpResponseRedirect(self.request.path_info)
def load_stations(request):
work_area_id = request.GET.get('work_area')
stations = StationNumber.objects.filter(work_area_id=work_area_id).order_by('name')
return render(request, 'operations/station_number_dropdown_options.html', {'stations': stations})
我想我的问题更倾向于,我怎样才能实现这样的东西
而且,当前签入会在提交时自动保存时间戳,但在按下签出区域按钮时不应更改时间戳,因为这会破坏其用途。l_userID=int()
l_userID = int(<feed the user id>)
l_areaID = <feed the area id>
l_stationId =<feed the station id>
l_objLogEntry = EmployeeWorkAreaLog.objects.filter(employee_number=l_userID,\
work_area__id = l_areaID,\
station_number__id = l_stationId)\
.exclude(time_out__isnull=True,\
time_out__exact='')
if len(l_objLogEntry) == 0:
#no login entry
elif len(l_objLogEntry) == 1:
#update the timestamp
elif len(l_objLogEntry) > 1:
#multiple open entries, do whatever
l_区域ID=
l_站ID=
l_objLogEntry=EmployeeWorkAreaLog.objects.filter(employee_number=l_userID\
工作区id=l区id\
车站编号(id=l车站id)\
.exclude(time\u out\u isnull=True\
超时(精确=“”)
如果len(l_objLogEntry)==0:
#没有登录条目
elif len(l_objLogEntry)=1:
#更新时间戳
elif len(l_objLogEntry)>1:
#多个打开的条目,执行任何操作