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
方法中的逻辑
或者最好:
- 修改序列化程序,将该方法的输出包含在新的
字段中
(可能将该方法设置为@属性
)