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

标签 python html django

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

我试图最终实现的是根据员工编号和工作区域将最初为 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/

相关文章:

android - Android默认浏览器中文本字段的背景颜色在单击时发生变化

python - Django JSONField 过滤

javascript - 如何从 HTML 上下文中删除虚线

javascript - 将带有文件输入的多个图像上传到 Canvas 元素

python - tokenize.detect_encoding(readline) 仅在 python3 中吗?

python - 在 Gephi 中可视化 networkx 图

python - Django mysql 准备语句

Django 三元组 : create gin index and search suggested words in Django

python - 在 PythonAnywhere 中更新导入模块后如何在控制台中查看新结果

python - 是否可以使用 Intervals 查询 Pandas IntervalIndex