2010-09-20 58 views
1

我正在尋找方法來動態更新使用ajax的內聯條目。即當用戶從下拉框中選擇項目時,可以用數據填充相關聯的輸入字段。如何使用ajax讀取/寫入Django-admin表格內聯的輸入字段?

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
  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); 
         }); 
        }); 
    }); 
    
相關問題