因此,我对此还很陌生,还没有时间坐下来做适当的学习。
我最终想要实现的是根据员工编号和工作区域,修改一个最初为NULL的时间戳到当前时间。其背后的想法是“签入/签出”系统。
首先,用户输入#和工作区,然后当他们“输入”时,将在数据库中创建一个条目,其中将#,工作区,进入时间和“超时”设置为NULL。完成后,只需再次输入#,工作区和“ Leave”,这将查找超时为NULL的最后一个条目,并且#和工作区相同,并将超时更新为新时间戳记。如果不存在,则会创建一个新条目,但会警告用户。
表格
class WarehouseForm(forms.Form):
class Meta:
model = EmployeeWorkAreaLog
fields = ('employee_number', 'work_area', 'station_number')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['station_number'].queryset = StationNumber.objects.none()
if 'work_area' in self.data:
try:
work_area_id = int(self.data.get('work_area'))
self.fields['station_number'].queryset = StationNumber.objects.filter(work_area_id=work_area_id).order_by('name')
except (ValueError, TypeError):
pass
elif self.instance.pk:
self.fields['station_number'].queryset = self.instance.work_area.stations.order_by('name')
models.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
views.py
class EnterExitArea(CreateView):
model = EmployeeWorkAreaLog
template_name = "operations/enter_exit_area.html"
form_class = WarehouseForm
def form_valid(self, form):
if 'enter_area' in self.request.POST:
form.save()
return HttpResponseRedirect(self.request.path_info)
elif 'leave_area' in self.request.POST:
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})
您可以像这样过滤EmployeeWorkAreaLog模型:
employee_log = EmployeeWorkAreaLog.objects.filter(employee_number=1234,work_area__name="East_Bay",station_number=1,time_out__isnull=True).first()
if not employee_log:
# create new entry and alert user
else:
employee_log.timeout = current_date_time
employee_log.save()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句