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

时间:2010-09-20 09:26:36

标签: jquery ajax django django-admin

我正在寻找使用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()

admin.py

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

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

1 个答案:

答案 0 :(得分: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. admin.py

    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);
            });
        });
    });