我正在尝试为记者添加ajax,但无法正常工作。当我使用{'reporter':reporter.name}
发送json数据时,它会成功在数据库中创建obj,但无法在select选项中显示此新创建的obj。我必须刷新才能在选择选项中看到该对象。然后,我尝试通过使用json.dumps(obj)
转储来将对象实例作为JsonResponse发送,但出现此错误可序列化错误。
我必须创建报告程序对象并在选择选项中显示而不刷新页面。我该怎么做 ?我的方法有什么问题吗?
视图
class AddReporterView(View):
def post(self, request):
name = request.POST.get('name')
reporter = Reporter.objects.create(name=name)
data = {
'reporter': json.dumps(reporter)
}
return JsonResponse(data)
脚本
$(document).on('submit','#target-category-form',function(e) {
e.preventDefault();
var form = $(this);
$.ajax({
url: form.attr("action"),
data: {
name:$('#name').val(),
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
},
type: 'POST',
dataType:'json',
success: handleFormSuccess,
});
});
function handleFormSuccess(data){
$("#id-categories").html(data);
$('#modalOpen').modal('toggle');
console.log(data);
}
我想在此html select元素中显示创建的数据
<select class="form-control" name="reporter" multiple="multiple" id="id-categories">
{% for reporter in reporters %}
<option value="{{reporter.pk}}">{{reporter.name}}</option>
{% endfor %}
</select>
答案 0 :(得分:1)
要将实例转换为字典,可以使用j + 1
。
model_to_dict
默认情况下,序列化是在from django.forms.models import model_to_dict
reporter = Reporter.objects.first()
data = {'reporter': model_to_dict(reporter)}
中使用JsonResponse
隐式完成的,因此您无需理会
json.dumps
# glimpse of source code.
class JsonResponse(HttpResponse):
def __init__(self, data, encoder=DjangoJSONEncoder, **kwargs):
...
data = json.dumps(data, cls=encoder, **json_dumps_params)
super().__init__(content=data, **kwargs)