2016-09-20 93 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。