如何使用 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 表格内联中读取/写入输入字段?的主要内容,如果未能解决你的问题,请参考以下文章