如何在不刷新页面的情况下正确显示存储在外部模型中的数据?

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

我试图在用户框的顶部显示用户名,而无需刷新页面即可在其中输入员工编号。

例如,他们输入他们的#,然后单击/制表到下一个字段后,它将在顶部显示其名称,该名称来自数据库,因此用户知道他们输入了正确的信息。此名称存储在单独的模型中,因此我尝试使用“ id / number”来检索它。

我不太熟悉AJAX,但是在阅读了一些类似的问题之后,看来AJAX请求将是实现此目标的最合适方法。我试图使一个函数get_employee_name根据我看到另一个ajax请求的工作方式返回此人的名字,但是我不确定如何实现它,因此在输入#后显示。

我的页面当前正在加载,但是当我使用F12检查网络时,永远不会调用函数/ URL来搜索名称以在页面上显示它。我不确定在哪里可能缺少连接代码的这两个区域的部分,但是我感觉它与应该发生调用的html标签有关,因为我不太熟悉html和Django。

models.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)
    station_number = models.ForeignKey(StationNumber, on_delete=models.SET_NULL, null=True,  blank=True)

这是存储名称的模型

alldata / models.py

class Salesman(models.Model):
    slsmn_name = models.CharField(max_length=25)
    id = models.IntegerField(db_column='number', primary_key=True)

我正在阅读我可以在窗口小部件的“属性”中添加“ onchange”部分,但我不太熟悉如何处理并将其与表单(而不是html)的ajax请求相关联。

表格

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

views.py

class EnterExitArea(CreateView):
    model = EmployeeWorkAreaLog
    template_name = "operations/enter_exit_area.html"
    form_class = WarehouseForm

    def form_valid(self, form):
        # do submission stuff..


def get_employee_name(request):
    employee_number = request.GET.get('employee_number')

    try:
        employee = Salesman.objects.get(id=employee_number)
    except Salesman.DoesNotExist:
        return JsonResponse({'error': 'Employee not found'}, status=404)

    employee_name = employee.slsmn_name
    return JsonResponse({'employee_name': employee_name})

urls.py

urlpatterns = [
    url(r'enter-exit-area/$', EnterExitArea.as_view(), name='enter_exit_area'),

    path('ajax/load-stations/', views.load_stations, name='ajax_load_stations'),
    path('get-employee-name/', views.get_employee_name, name='ajax_get_employee_name'),
]

我尝试创建的ajax请求位于此html的末尾。我修改了一个类似的请求,但实际上并没有在屏幕上显示任何内容,不确定我是否缺少该请求实际上从未被调用过的区域,因为我不太熟悉这些请求的工作方式。

enter_exit_area.html

{% extends "base.html" %}

{% block main %}
    <form id="warehouseForm" action="" method="POST" data-stations-url="{% url 'operations:ajax_load_stations' %}" novalidate >
        {% csrf_token %}
        <div>
            <h1 get-employee-name-url="{% url 'operations:ajax_get_employee_name' %}"></h1>
            <div>
                {{ form.employee_number.help_text }}
                {{ form.employee_number }}
            </div>
            <div>
                {{ form.work_area.help_text }}
                {{ form.work_area }}
            </div>
        </div>

        <div>
            <div>
                <button type="submit" name="enter_area" value="Enter">Enter Area</button>
            </div>
        </div>
    </form>

<!-- This is the dependent dropdown script -->

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script>
        $("#id_work_area").change(function () {
            var url = $("#warehouseForm").attr("data-stations-url");
            var workAreaId = $(this).val();

            $.ajax({
                url: url,
                data: {
                    'work_area': workAreaId
                },
                success: function (data) {
                    $("#my-hidden-div").show(); // show it
                    $("#id_station_number").html(data);
                    // Check the length of the options child elements of the select
                    if ($("#id_station_number option").length == 1) {
                        $("#id_station_number").parent().hide(); // Hide parent of the select node
                    } else {
                        // If any option, ensure the select is shown
                        $("#id_station_number").parent().show();
                    }
                }
            });
        });
     </script>

<!-- -->

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

            $.ajax({
            url: url,
            type:'GET',
            data: {
                'id': employee_number
            },
            success: function (data) {
                var employee_name = data['employee_name'];
                $('#employee_name')[0].innerHTML = employee_name;
            },
            error : function (data) {
                var error_message = data['error'];
                $('#employee_name')[0].innerHTML = error_message;
            }
            });
        });
    </script>

{% endblock main %}

是什么导致页面上没有呈现内容?html部分是否缺少电话?

我认为onchange()应该在某个地方,但是我不确定它在哪里,因为表单字段是它自己的东西,没有标签。

马特·克里蒙斯

关于

var url = $("#warehouseForm").attr("get-employee-name-url");

id所引用的表单没有属性名称“ get-employee-name-url”。您的网址实际上在这里

<h1 get-employee-name-url="{% url 'operations:ajax_get_employee_name' %}"></h1>

所以也许像这样添加一个ID

<h1 id="url" get-employee-name-url="{% url 'operations:ajax_get_employee_name' %}"></h1>

然后您可以像以前一样访问它

var url = $("#url").attr("get-employee-name-url");

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不刷新页面的情况下更新会话存储数据?

来自分类Dev

如何在不刷新页面的情况下正确加载Google Map API?

来自分类Dev

如何在不刷新页面的情况下点击按钮后显示本地存储的内容?

来自分类Dev

如何在不刷新页面的情况下获取laravel数据?

来自分类Dev

如何在不刷新页面的情况下将数据保存到Mysql

来自分类Dev

React Flash消息:如何在不刷新页面但不刷新页面的情况下显示消息

来自分类Dev

使用ajax如何在不刷新页面的情况下显示特定td的值

来自分类Dev

如何在不刷新页面的情况下连续更新PHP变量?

来自分类Dev

如何在不刷新页面的情况下重复each()

来自分类Dev

如何在不刷新页面的情况下登录网站

来自分类Dev

如何在不刷新页面的情况下使用jQuery remove()?

来自分类Dev

如何在不刷新页面的情况下对表单使用验证?

来自分类Dev

如何在不刷新页面的情况下检测 Service Worker 更新?

来自分类Dev

如何在不刷新页面的情况下捕获javascript中的php会话变量?

来自分类Dev

如何在不刷新页面的情况下更改表单输入中的预览值

来自分类Dev

如何在laravel中不刷新页面的情况下添加多个产品

来自分类Dev

如何在不刷新页面的情况下重新初始化同一页面中的数据表

来自分类Dev

如何在不刷新页面的情况下定期更新数据?

来自分类Dev

如何在不刷新页面的情况下定期更新数据?

来自分类Dev

如何在不刷新页面的情况下从php中的sql server数据库中获取数据

来自分类Dev

如何在不刷新页面的情况下从php中的sql server数据库中获取数据

来自分类Dev

如何在不刷新页面的情况下在烧瓶中创建链接的selectfield?

来自分类Dev

如何在不刷新页面的情况下在url中传递参数?

来自分类Dev

如何在不刷新页面MVC C#的情况下显示不同的值

来自分类Dev

如何使用Express和Connect-Flash在不刷新页面的情况下显示Flash消息?

来自分类Dev

单击后如何在不刷新页面的情况下如何使on('click')重置为onload状态?

来自分类Dev

如何在不刷新页面的情况下更改路线和内容?(对机器人友好)

来自分类Dev

如何在不刷新页面的情况下使用Vue切换按钮

来自分类Dev

如何在不刷新页面的情况下将python输出发送回html?

Related 相关文章

  1. 1

    如何在不刷新页面的情况下更新会话存储数据?

  2. 2

    如何在不刷新页面的情况下正确加载Google Map API?

  3. 3

    如何在不刷新页面的情况下点击按钮后显示本地存储的内容?

  4. 4

    如何在不刷新页面的情况下获取laravel数据?

  5. 5

    如何在不刷新页面的情况下将数据保存到Mysql

  6. 6

    React Flash消息:如何在不刷新页面但不刷新页面的情况下显示消息

  7. 7

    使用ajax如何在不刷新页面的情况下显示特定td的值

  8. 8

    如何在不刷新页面的情况下连续更新PHP变量?

  9. 9

    如何在不刷新页面的情况下重复each()

  10. 10

    如何在不刷新页面的情况下登录网站

  11. 11

    如何在不刷新页面的情况下使用jQuery remove()?

  12. 12

    如何在不刷新页面的情况下对表单使用验证?

  13. 13

    如何在不刷新页面的情况下检测 Service Worker 更新?

  14. 14

    如何在不刷新页面的情况下捕获javascript中的php会话变量?

  15. 15

    如何在不刷新页面的情况下更改表单输入中的预览值

  16. 16

    如何在laravel中不刷新页面的情况下添加多个产品

  17. 17

    如何在不刷新页面的情况下重新初始化同一页面中的数据表

  18. 18

    如何在不刷新页面的情况下定期更新数据?

  19. 19

    如何在不刷新页面的情况下定期更新数据?

  20. 20

    如何在不刷新页面的情况下从php中的sql server数据库中获取数据

  21. 21

    如何在不刷新页面的情况下从php中的sql server数据库中获取数据

  22. 22

    如何在不刷新页面的情况下在烧瓶中创建链接的selectfield?

  23. 23

    如何在不刷新页面的情况下在url中传递参数?

  24. 24

    如何在不刷新页面MVC C#的情况下显示不同的值

  25. 25

    如何使用Express和Connect-Flash在不刷新页面的情况下显示Flash消息?

  26. 26

    单击后如何在不刷新页面的情况下如何使on('click')重置为onload状态?

  27. 27

    如何在不刷新页面的情况下更改路线和内容?(对机器人友好)

  28. 28

    如何在不刷新页面的情况下使用Vue切换按钮

  29. 29

    如何在不刷新页面的情况下将python输出发送回html?

热门标签

归档