2010-09-20 4 views
1

Je suis à la recherche de moyens de mettre à jour dynamiquement les entrées en ligne en utilisant ajax. c'est-à-dire que l'utilisateur sélectionne un élément dans la liste déroulante, les champs de saisie associés peuvent être remplis avec des données.Comment lire/écrire des champs de saisie dans les tableaux tabulaires de Django-admin en utilisant ajax?

La partie views.py pour ajax devrait être simple. Mais un problème pour moi est de savoir comment obtenir les noms des boîtes déroulantes dans js, qui peuvent être ajoutées à la volée.

Voici les models.py et 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,] 

Répondre

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); 
         }); 
        }); 
    });