如何使用Django正确执行此Ajax请求?

马里亚纳·戈麦斯-库斯涅科夫

我用一个表格创建了一个页面,该页面包含一个名为EmployeeWorkAreaLog的模型中的几个字段,第一个字段是一个人输入其Employee#的位置,该字段与一个名为Salesman的独立模型绑定,该模型具有用于验证的所有主要数据。我创建了此函数get_employee_name()该函数根据另一个模型Employee#返回名称,但是我不确定如何在页面上显示该名称,而在人员选项卡/单击后不刷新就不会刷新进入表格的下一个字段?

我对html不太熟悉,但是我正在阅读ajax请求就可以解决问题,但是我不确定如何解决这个问题。在下面,您可以看到我的尝试,但是我不确定如何处理成功或如何正确地将其插入html。

基本上是这样,此人在继续填写其余人员之前就知道他们输入的员工编号与他们的姓名匹配。

views.py

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['adp_number']
        area = form.cleaned_data['work_area']
        station = form.cleaned_data['station_number']

        if 'enter_area' in self.request.POST:
            form.save()
            return HttpResponseRedirect(self.request.path_info)

        elif 'leave_area' in self.request.POST:
            form.save()
            EmployeeWorkAreaLog.objects.filter(adp_number=emp_num).update(time_out=datetime.now())
            return HttpResponseRedirect(self.request.path_info)


def get_employee_name(request):
    adp_number = request.GET.get('adp_number')
    employee = Salesman.objects.get(adp_number=adp_number)
    employee_name = employee.slsmn_name
    return employee_name

models.py

class EmployeeWorkAreaLog(TimeStampedModel, SoftDeleteModel, models.Model):
    adp_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)
    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.adp_number

表格

class WarehouseForm(AppsModelForm):
    class Meta:
        model = EmployeeWorkAreaLog
        widgets = {
            'adp_number': ForeignKeyRawIdWidget(EmployeeWorkAreaLog._meta.get_field('adp_number').remote_field, site),
        }
        fields = ('adp_number', 'work_area', 'station_number')

    def __str__(self):
        return self.adp_number

urls.py

urlpatterns = [
    url(r'enter-exit-area/$', EnterExitArea.as_view(), name='enter_exit_area'),
    path('ajax/get-employee-name', views.get_employee_name, name='ajax_get_employee_name'),
]

enter_exit_area.html

{% extends "base.html" %}

{% block main %}
    <form id="warehouseForm" action="" method="POST" get-employee-name-url="{% url 'operations:ajax_get_employee_name' %} novalidate >
        {% csrf_token %}

        <div>
            <div>
                {{ form.adp_number.help_text }}
                {{ form.adp_number }}
            </div>
            <div>
                {{ form.work_area.help_text }}
                {{ form.work_area }}
            </div>
            <div>
                {{ form.station_number.help_text }}
                {{ 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>

    <script>
        $("#id_adp_number").change(function () {
            var url = $("#warehouseForm").attr("get-employee-name-url");
            var adp_num = $(this).val();

            $.ajax({
                url: url,
                data: {
                    'adp_number': adp_num
                },
                success: function (response) {

                }
            });
        });
    </script>

{% endblock main %}

以下是存储所有原始数据的模型的一部分。alldata / models.py

class Salesman(models.Model):
    slsmn_name = models.CharField(max_length=25)
    adp_number = models.IntegerField()
J·本肯

您为什么不尝试以下方法:

1)将这样的路由添加到urls.py

path('get-employee-name/<int:adp_num>/', views.get_employee_name, name='employee_name')

2)您需要一种方法来引用ADP编号表单字段,因此请id在您的models.py中为其指定HTML属性。

class WarehouseForm(AppsModelForm):
    class Meta:
        model = EmployeeWorkAreaLog
        widgets = {
            'adp_number': ForeignKeyRawIdWidget(EmployeeWorkAreaLog._meta.get_field('adp_number').remote_field, site, attrs={'id':'adp_number_field'}),                                                
        }
        fields = ('adp_number', 'work_area', 'station_number')

    def __str__(self):
        return self.adp_number

尽管不能完全确定这是否是正确的位置,请添加attrs={'id':'adp_number_field'}到内部ForeignKeyRawIdWidget()。)

您还需要一个HTML元素,该元素将包含并显示员工的姓名,因此,在表单外部的某处添加这样的HTML元素: <p id='employee_name'></p>

3)像您一样,使用AJAX来检测ADP编号字段中的更改,然后将POST发送到上面的URL,该URL返回员工姓名。

        $("#adp_number_field").change(function () {
            var adp_num = $(this).val();
            var url = 'get-employee-name/' + adp_num;

            $.ajax({
                url: url,
                type:'post',    
                data: {
                    'adp_number': adp_num
                },
                success: function (data) {
                    employee_name = data;
                    $('#employee_name')[0].innerHTML = employee_name;
                }
            });
        });

我没有进行任何测试,这只是我的脑袋,但是这里应该有足够的东西来使您走上正确的道路。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Django中正确执行AJAX请求

如何使用 sequelize 执行此请求?

如何使用Ajax调用在application.js中正确执行jquery请求

如何使用 Powershell 表单正确执行此操作?

为什么此ajax发布请求在Nodejs express中执行发布请求之前就立即使用数据执行GET请求?

如何正确执行 POST 请求?

如何使用jQuery发出Django Ajax请求?

StatusDescription =此请求无权使用此权限执行此操作

如何在Clojurescript中使用试剂执行Ajax请求?

如何在JavaScript中使用JSONP请求执行Ajax调用?

如何使用Ajax和Node从表单执行Get请求

如何使用Symfony从ajax请求正确返回html模板

如何正确执行此SQL查询?

如何正确执行此 mysql 查询?

如何正确使用此参数?

如何正确执行多个并发请求?

如何在Django中使用ajax发布请求发送文件

django 如何正确建模此表?

如何使用Python使用JSON文件正确执行AWS Lambda API发布请求

如何在JMeter中执行Ajax请求?

如何通过 AJAX 请求执行连接查询

如何从Rails正确获取对React的AJAX请求

如何正确使用请求请求?(git / bitbucket)

在保存请求或使用django rest框架响应之前,如何对传入请求执行某些任务?

如何使用 Ajax / Laravel 执行此操作(单击链接更改查询)

如何使此PowerShell Web请求正确保存会话?

使用 arangodb java 驱动程序“无权执行此请求”

如何在Java Servlet中正确执行此命令

如何正确执行此基于Promise的SQL查询?