如何使用ajax在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,]
-
urls.py
from django.conf import settings urlpatterns = patterns('', (r'^json/tshirt/$', json_order), (r'^site_media/(?P
.*)$', '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); }); }); });