2016-09-20 44 views
1

我的模型:从Django的JsonResponse返回正确的JSON

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    phone = models.CharField(max_length=20) 
    email = models.EmailField() 

笔者认为:

def users(request): 
    people = Person.objects.all() 
    data = serializers.serialize('json', people) 
    return JsonResponse(data, safe=False) 

所有,我想回去是JSON格式的数据。我正在找回是这样的:

"[{\"model\": \"myapp.person\", \"pk\": 1, \"fields\": {\"first_name\": \"ahmet\", \"last_name\": \"arsan\", \"phone\": \"xxx-xxx-xxxx\", \"email\": \"[email protected]\"}}]" 

虽然在技术上是有效的JSON,有2个问题(对我来说)这响应:

  1. 我不希望这些双引号逃脱。
  2. 我不需要型号名称(myapp.person)。

我不知道我做错了什么,但是好像有些东西在这里。也许我的查询应该返回一个字典,但我不知道如何去做到这一点。我正在使用Django 1.10.1,Python 3.4。

回答

0

我假设你问这个问题的API响应。我会建议使用Rest Framework,因为它使事情变得非常简单。您可以通过为模型编写自己的序列化程序来选择自己的字段。

from rest_framework import serializers 

class PersonSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Person 
     fields = ('first_name', 'last_name', 'phone', 'email') 
+0

谢谢。我认为使用JsonResponse会更容易,但完全错误。 DRF是要走的路。 – Progger

1

你已经有了答案,但是你做错了什么是双重编码。 JsonResponse序列化为json,但是您已经拥有json,因为它是从serialiser返回的。

要么串行化为“python”,要么使用标准的HttpResponse。