Javascript 如何从python django后端到前端的AJAX获取对象描述?

Javascript 如何从python django后端到前端的AJAX获取对象描述?,javascript,jquery,python,ajax,django,Javascript,Jquery,Python,Ajax,Django,在模型中,我指定了对象描述 def __unicode__(self): ............................... 我想在用Ajax生成的动态下拉框中看到这一描述。 但我只是在下拉列表中得到[object] 我的数据以以下方式流动: 1-我的api中有消毒器 class LeaseTermSerializer(serializers.ModelSerializer): class Meta: model=LeaseTerm fields =

在模型中,我指定了对象描述

def __unicode__(self): ...............................
我想在用Ajax生成的动态下拉框中看到这一描述。 但我只是在下拉列表中得到[object]

我的数据以以下方式流动:

1-我的api中有消毒器

class LeaseTermSerializer(serializers.ModelSerializer):
class Meta:
    model=LeaseTerm       
    fields = '__all__' 
2-我有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>');
        })
      },

    });

}
函数getleaseterm(){ //获取对select元素的引用 $select=$(“#leaseterm”); //请求JSON数据并解析到select元素中 var l_id=($(“选择[name='lease']选项:selected”).attr('value'); l_url=“/api/get_leaseterm/”+l_id+“/”; $.ajax({ url:l_url, 数据类型:'JSON', 成功:功能(数据1){ //清除“选择”对话框的当前内容 $select.empty(); $select.append('select term'); //迭代数据并附加一个选择选项 $。每个(数据1,函数(键,val){ $select.append(“”+val+“”); }) }, }); } 问题是,如果我不指定要显示的字段,则在下拉列表中显示的“val”值将显示下拉列表中所有值的[object object],而我希望它显示我为模型指定的对象的描述


如何在我的下拉列表中看到我的对象描述?

在您的例子中,
val
序列化程序。数据
(在序列化程序声明中表示json对象)因此,您看到
[object object]
,您会与django模板混淆,因为您可以使用这种方式。 但您可以将charfield添加到序列化程序并使用它

as_char = serializers.CharField(source='__unicode__')
在html中:

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

它显示
[object object]
,因为您的
get\u leaseterm
端点返回序列化为JSON对象的
leaseterm
列表,并且您正在将对象本身添加到
选项
元素内容中

您定义的python方法在客户端不可用。要解决您的问题,您有两种解决方案:

  • 在JavaScript中实现客户端上的
    \uuuuunicode\uuuu
    方法中的逻辑
或者最好:

  • 修改序列化程序,将该方法的输出包含在新的
    字段中
    (可能将该方法设置为
    @属性