gpt4 book ai didi

python - Django - 如何根据多个字段编辑数据库中的特定行?

转载 作者:太空宇宙 更新时间:2023-11-03 20:14:48 25 4
gpt4 key购买 nike

所以,我对此还很陌生,还没有时间坐下来进行适当的学习。

我试图最终实现的是根据员工编号和工作区域将最初为 NULL 的时间戳修改为当前时间。这背后的想法是“ checkin / checkout ”系统。

首先,用户输入 # 和工作区域,当他们“输入”时,会在数据库中创建一个条目,其中包含 #、工作区域、开始时间和设置为 NULL 的“超时”。一旦完成,他们只需再次输入 #、工作区和“离开”,这应该查找超时中带有 NULL 的最后一个条目,以及相同的 # 和工作区,并将超时更新为新的时间戳。如果不存在,它将创建一个新条目,但会提醒用户。

forms.py

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()

关于python - Django - 如何根据多个字段编辑数据库中的特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58523311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com