【问题标题】:How to read/write input fields in Django-admin tabular inlines using ajax?如何使用 ajax 在 Django-admin 表格内联中读取/写入输入字段?
【发布时间】: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,]

【问题讨论】:

    标签: jquery ajax django django-admin


    【解决方案1】:
    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}),
          ...
      )
      
    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. 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',)
      
    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);
              });
          });
      });
      

    【讨论】:

      猜你喜欢
      • 2018-01-16
      • 2021-07-10
      • 1970-01-01
      • 2012-10-19
      • 2012-02-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多