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

Posted

技术标签:

【中文标题】如何使用 ajax 在 Django-admin 表格内联中读取/写入输入字段?【英文标题】:How to read/write input fields in Django-admin tabular inlines using ajax? 【发布时间】:2011-04-14 14:05:03 【问题描述】:

我正在寻找使用 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】:

    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),
        ...
    )
    

    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()
    

    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',)
    

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

【讨论】:

以上是关于如何使用 ajax 在 Django-admin 表格内联中读取/写入输入字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django-admin 中添加自定义搜索框?

如何测试自定义 django-admin 命令

Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?

如何在django-admin中隐藏特定记录的字段?

如何隐藏 django-admin 中的某些字段?

如何解决django-admin.py startproject mysite在window下无法创建文件