一尘不染

如何使用ajax在Django-admin表格内联中读取/写入输入字段?

ajax

我正在寻找使用ajax动态更新内联条目的方法。即,当用户从下拉框中选择一个项目时,可以用数据填充相关的输入字段。

Ajax的views.py部分应该很简单。但是对我来说,一个问题是如何在js中获取下拉框的名称,该名称可以随时添加。

以下是models.py和admin.py:

models.py

    class Tshirt:
        designer = CharField()
        default_wording = CharField()

    class Order:
        date = DateField()

    class Order_item:
        order = ForeignKey(Order, related_name='order')
        tshirt = ForeignKey(Tshirt)
        wording = CharField()

管理员

    class Order_Inline(TabularInline):
        model = Order_item
        fk_name = 'order'

    class Order_Admin(ModelAdmin):
        inlines = [Order_Inline,]

阅读 355

收藏
2020-07-26

共1个答案

一尘不染

  1. urls.py

``
from django.conf import settings

urlpatterns = patterns('',
    (r'^json/tshirt/$', json_order),
    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    ...
)

  2. views.py

    from django.core import serializers


def json_order(request):
    search = request.GET.get('tshirt_id')
    if search:
        result = Tshirt.objects.filter(id=search)
        return HttpResponse(serializers.serialize('json', result, fields=('default_wording')), mimetype='application/json')
    return HttpResponse()

  3. 管理员

    class Order_Inline(TabularInline):
    model = Order_item
    fk_name = 'order'


class Order_Admin(ModelAdmin):
    inlines = [Order_Inline,]
    class Media:
        js = ('/media/js/jquery.js', '/site_media/js/tshirt.js',)

  4. _settings.MEDIA_ROOT_ / js / tshirt.js

    $(document).ready(function() {
    $(".module").delegate("[id$=-tshirt]", "change", function() {
        var row = $(this).attr("id").split('id_order_item-')[1].split("-tshirt")[0];
        var tshirt_id = $(this).val();
        var data = {"tshirt_id":tshirt_id};
        $.getJSON("/json/tshirt", data, function(data) {
            var dw = data[0]["fields"]["default_wording"];
            $("input[id='id_item-"+row+"-wording']").val(dw);
        });
    });
});

```

2020-07-26