Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确地;“提示”;Django中views.py中基于逻辑的值的用户?_Python_Html_Django_Django Views - Fatal编程技术网

Python 如何正确地;“提示”;Django中views.py中基于逻辑的值的用户?

Python 如何正确地;“提示”;Django中views.py中基于逻辑的值的用户?,python,html,django,django-views,Python,Html,Django,Django Views,我试图修改一个页面,该页面基本上可以跟踪用户何时进入/离开某个区域。目前,所有的逻辑都可以正常工作,但我想添加一个功能,要求用户输入他们自己的“估计”时间,以防他们忘记输入/离开,因为这些实例在提交时会被标记。我是Django/Python的新手,我对这一切的工作原理有一个非常基本的了解,因此如果我对处理这一问题的建议有点不恰当,我提前表示歉意 以下是模型外观的总结版本: 型号.py class EmployeeWorkAreaLog(TimeStampedModel, SoftDeleteMo

我试图修改一个页面,该页面基本上可以跟踪用户何时进入/离开某个区域。目前,所有的逻辑都可以正常工作,但我想添加一个功能,要求用户输入他们自己的“估计”时间,以防他们忘记输入/离开,因为这些实例在提交时会被标记。我是Django/Python的新手,我对这一切的工作原理有一个非常基本的了解,因此如果我对处理这一问题的建议有点不恰当,我提前表示歉意

以下是模型外观的总结版本:

型号.py

class EmployeeWorkAreaLog(TimeStampedModel, SoftDeleteModel, models.Model):
    employee_number = models.ForeignKey(Salesman, on_delete=models.SET_NULL, help_text="Employee #", null=True, 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)
    edited_timestamp = models.DateTimeField(null=True, blank=True)
    time_exceptions = models.CharField(max_length=2, blank=True)
    time_in = models.DateTimeField(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):
        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 employee has an entry without an exit and attempts to enter a new area, mark as an exception 'N'
            if EmployeeWorkAreaLog.objects.filter(Q(employee_number=emp_num) & Q(time_out__isnull=True) & Q(time_exceptions="")).count() > 1:
                first = EmployeeWorkAreaLog.objects.filter(employee_number=emp_num, time_out__isnull=True).order_by('-time_in').first()
                EmployeeWorkAreaLog.objects.filter((Q(employee_number=emp_num) & Q(time_out__isnull=True))).exclude(pk=first.pk).update(time_exceptions='N')

            # Here would be the rendering of the page, maybe as a popup? and then saving the entered field using edited = form.cleaned_data['edited_timestamp'] and then saving it using .update()

            return HttpResponseRedirect(self.request.path_info)
我认为最简单的方法是将其添加到views.py中的逻辑中,以防止更新错误记录,这样,在标记条目之后,用户就会被提示输入他们估计进入某个区域的日期/时间

为了保持代码可读性,我只展示了标记条目的情况。如果有人试图进入任何区域,则会忘记退出,然后再次尝试进入某个区域,则会立即标记没有退出的记录(时间为标记)

视图.py

class EmployeeWorkAreaLog(TimeStampedModel, SoftDeleteModel, models.Model):
    employee_number = models.ForeignKey(Salesman, on_delete=models.SET_NULL, help_text="Employee #", null=True, 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)
    edited_timestamp = models.DateTimeField(null=True, blank=True)
    time_exceptions = models.CharField(max_length=2, blank=True)
    time_in = models.DateTimeField(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):
        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 employee has an entry without an exit and attempts to enter a new area, mark as an exception 'N'
            if EmployeeWorkAreaLog.objects.filter(Q(employee_number=emp_num) & Q(time_out__isnull=True) & Q(time_exceptions="")).count() > 1:
                first = EmployeeWorkAreaLog.objects.filter(employee_number=emp_num, time_out__isnull=True).order_by('-time_in').first()
                EmployeeWorkAreaLog.objects.filter((Q(employee_number=emp_num) & Q(time_out__isnull=True))).exclude(pk=first.pk).update(time_exceptions='N')

            # Here would be the rendering of the page, maybe as a popup? and then saving the entered field using edited = form.cleaned_data['edited_timestamp'] and then saving it using .update()

            return HttpResponseRedirect(self.request.path_info)
我试图这样做,而不是重定向到同一个页面,它将呈现类似于下面页面的内容,这只是请求时间,在用户提交后,它将其保存到记录的“编辑的时间戳”字段中

更新\u编辑的\u timestamp.html

<div>
    <form id="warehouseForm" action="" method="POST" class="form-horizontal">
        <label>Enter estimated time:</label>
        <input value="html()" type="datetime-local" name="edited_timestamp">
    </form>
</div>
{% extends "operations/base.html" %}

{% block main %}
    <form id="warehouseForm" action="" method="POST" class="form-horizontal" novalidate >
        {% csrf_token %}

        <div>
            <div>
                <div style="color: red">{{ form.employee_number.errors.as_text }}</div>
                <label>Employee</label>
                {{ form.employee_number }}
            </div>

            <div>
                <div style="color: red">{{ form.work_area.errors.as_text }}</div>
                <label>Work Area</label>
                {{ form.work_area }}
            </div>
            <div style="color: red">{{ form.station_number.errors.as_text }}</div>
            <div>
                <label>Station</label>
                {{ form.station_number }}
            </div>
        </div>

        <div>
            <div>
                <button type="submit" name="enter_area" value="Enter">Enter Area</button>
                <button type="submit" name="leave_area" value="Leave">Leave Area</button>
            </div>
        </div>
    </form>
{% endblock main %}

输入估计时间:
添加我的主html页面,所有这些都发生在这里以防万一

进入退出区域.html

<div>
    <form id="warehouseForm" action="" method="POST" class="form-horizontal">
        <label>Enter estimated time:</label>
        <input value="html()" type="datetime-local" name="edited_timestamp">
    </form>
</div>
{% extends "operations/base.html" %}

{% block main %}
    <form id="warehouseForm" action="" method="POST" class="form-horizontal" novalidate >
        {% csrf_token %}

        <div>
            <div>
                <div style="color: red">{{ form.employee_number.errors.as_text }}</div>
                <label>Employee</label>
                {{ form.employee_number }}
            </div>

            <div>
                <div style="color: red">{{ form.work_area.errors.as_text }}</div>
                <label>Work Area</label>
                {{ form.work_area }}
            </div>
            <div style="color: red">{{ form.station_number.errors.as_text }}</div>
            <div>
                <label>Station</label>
                {{ form.station_number }}
            </div>
        </div>

        <div>
            <div>
                <button type="submit" name="enter_area" value="Enter">Enter Area</button>
                <button type="submit" name="leave_area" value="Leave">Leave Area</button>
            </div>
        </div>
    </form>
{% endblock main %}
{%extends“operations/base.html”%}
{%block main%}
{%csrf_令牌%}
{{form.employee_number.errors.as_text}
雇员
{{form.employee_number}
{{form.work\u area.errors.as\u text}
工作区
{{form.work_area}}
{{form.station\u number.errors.as\u text}
站
{{form.station_number}
进入区域
离开区
{%endblock main%}

您有什么问题需要我们帮助吗?@2ps是的,目前,“弹出窗口”(基本上是简短的html)只是一个不显示的页面。我试图实现的是从views.py(注释所在的位置)渲染它,但我不知道如何在不重定向或刷新页面的情况下渲染它。