2017-09-24 1 views
1

Bei den Modellen habe ich ObjektbeschreibungWie bekomme ich eine Beschreibung des Objekts von Python Django Backend zu AJAX im Frontend?

angegeben
def __unicode__(self): ............................... 

Und ich mag diese Beschreibung in meinen dynamischen Drop-Boxen mit Ajax erzeugt, um zu sehen. Aber ich bekomme [Objekt Objekt] im Dropdown-Menü.

fließen Meine Daten in folgenden Weise:

1-I-Sterilisator in meinem api haben

class LeaseTermSerializer(serializers.ModelSerializer): 
class Meta: 
    model=LeaseTerm  
    fields = '__all__' 

2-Ich habe api Verfahren im Hinblick

@api_view(['GET']) @csrf_exempt def get_leaseterm(request, tid): 
    leasetermobj = LeaseTerm.objects.filter(lease=tid,is_active = True) 
    leaseterm_serializer = LeaseTermSerializer(leasetermobj, many=True) 
    response = Response(leaseterm_serializer.data) 
    return Response(response.data,status=status.HTTP_200_OK) 

3-In meiner Vorlage Ich baue es so

function getleaseterm() { 

    //get a reference to the select element 
    $select = $('#leaseterm'); 
    //request the JSON data and parse into the select element 
    var l_id = ($("select[name='lease'] option:selected").attr('value')); 
    l_url = "/api/get_leaseterm/"+l_id+"/"; 

    $.ajax({ 
     url: l_url, 
     dataType:'JSON', 
     success:function(data1){ 
     //clear the current content of the select 
     $select.empty(); 
     $select.append('<option value="-1">Select term </option>'); 
     //iterate over the data and append a select option 

     $.each(data1, function(key, val){ 
      $select.append('<option value="' + val.id + '">' + val + '</option>'); 
     }) 
     }, 

    }); 

} 

Problem ist, dass der "val" -Wert, den ich in der Dropdownliste zeige, wenn II nicht angibt, welches Feld ich anzeigen möchte, [object Object] für alle Werte in Dropdown anzeigen wird, wenn ich die Beschreibung des Objekts anzeigen möchte, für das ich angegeben habe mein Modell.

Wie kann ich meine Objektbeschreibung in meinem Dropdown sehen?

Antwort

1

in Ihrem Fall val ist die serializer.data (bedeutet JSON-Objekt von Ihrem Serialisierer deklarieren), so als Ergebnis [object Object], Sie sind mit Django-Vorlage verwirrend, wo Sie so verwenden können. aber Sie können, Charfield zu Ihrem Serializer hinzufügen, und es verwenden

as_char = serializers.CharField(source='__unicode__') 

in html: zeigt das

$select.append('<option value="' + val.id + '">' + val.as_char + '</option>'); 
1

Es [object Object] weil Ihr get_leaseterm Endpunkt eine Liste von LeaseTerm serialisiert als JSON-Objekten zurückgibt und Sie fügen das Objekt selbst zum Inhalt des Elements option hinzu.

Die von Ihnen definierten Python-Methoden sind auf der Clientseite nicht verfügbar. Um das Problem zu lösen haben Sie 2 Lösungen:

  • die Logik implementieren Sie in der __unicode__ Methode auf der Client-Seite in JavaScript haben.

oder vorzugsweise:

  • modifizieren Ihre Serializer den Ausgang dieses Verfahrens in einem neuen field (wahrscheinlich diese Methode als @property Einstellung) aufzunehmen.
Verwandte Themen