我正在寻找使用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()
管理员
class Order_Inline(TabularInline): model = Order_item fk_name = 'order' class Order_Admin(ModelAdmin): inlines = [Order_Inline,]
`` 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. 管理员
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); }); }); });
```