我正在寻找使用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,]
答案 0 :(得分: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);
});
});
});