2017-09-24 61 views
1

在模型中我已指定對象描述如何從python django後端到AJAX的前端描述對象?

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

而且我希望看到這個描述在使用Ajax生成我的動態投遞。 但我只是在下拉菜單中獲得[object Object]。在以下方式

我的數據流:

1-I具有消毒器在我的API

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

2-I有鑑於API方法

@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-以我模板我這樣構建它

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

    }); 

} 

問題是,如果我不指定要顯示的字段,則在下拉菜單中顯示的「val」值將在我希望顯示我指定的對象的描述時,爲下拉列表中的所有值顯示[對象對象]我的模型。

如何在我的下拉列表中查看我的對象描述?

回答

1

你的情況valserializer.data(表示你的序列化程序聲明的json對象),所以你看到[object Object],你對django模板感到困惑,你可以使用這種方式。 但你可以添加charfield到您的串行,並用它

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

在HTML:

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

它顯示[object Object]因爲你get_leaseterm終點返回序列化爲JSON對象和你的LeaseTerm列表將對象本身添加到option元素內容中。

您定義的python方法在客戶端不可用。爲了解決您的問題,你有2個解決方案:

  • 實現你在JavaScript中的客戶端的__unicode__方法有邏輯。

或優選:

  • 修改串行到包括在一個新的field該方法的輸出(可能設置該方法作爲@property)。