2017-06-24 18 views
0

私は私のAjaxレスポンスにクエリーセットを返したいのですが、これはクエリーセットをシリアライズしようとするとエラーになります。JSONはDjangoでクエリセットをシリアル化できますか?

TypeError: 'Font: FontName' is not JSON serializable

私はそうのようなJSONレスポンスを使用しています:私も、同じエラーを試してみました

... 
return JsonResponse({ 
    'foo': Font.objects.filter(id=1).first(), 
}) 

response = json.dumps({ 
    'foo' : tmp_fonts, 
}) 

return HttpResponse(response, content_type='application/json') 

3回目:

AttributeError: 'str' object has no attribute '_meta'

# tmp_fonts = [<Font:CaviarDream>, <Font:Arial>, <Font:Calibri>, etc...] 

return JsonResponse({ 
    'foo': serializers.serialize('json', tmp_fonts), 
}) 

私は、応答でそれを取り戻すと私のテンプレートにクエリ内のすべてのフィールドを表示できるようにしたいと思います。これも可能ですか?


モデル:

class UserInfo(models.Model): 
    organisation = models.CharField(max_length=255) 
    font = models.ManyToManyField(Font) 

class Font(models.Model): 
    name = models.CharField(max_length=255) 
+0

ルック[ここ](https://docs.djangoproject.com/en/1.11/topics/serialization/)。十分でない場合は、必要なものを手動で作成することができます。また、 'JsonResponse'を使う必要があります。もう1つは投げ捨ててください。 – RompePC

+0

シリアライザをポストして両方をモデル化できますか?また、3回目に 'tmp_backgrounds'を試してください –

+1

シリアライザの中で、' tmp_fonts'を 'Font.objects.all()'(またはそれが何であれ)に置き換えてください。これは、リストではなくQuerySetで動作するように提案されています。 – RompePC

答えて

1

だから、短いバージョンです:

from django.http import JsonResponse 
from django.views import generic 
from .models import Font 


class FontListAjaxView(generic.View): 
    def get(self, *args, **kwargs): 
     return JsonResponse(data=list(Font.objects.values()), safe=False) 
     # or the "safe" version, where data needs to be dictionary: 
     # return JsonResponse(data={'data': list(Font.objects.values())) 
0

ソリューション:、リスト内のクエリセットのために働いていたものです。

# tmp_fonts = [<Font:CaviarDream>, <Font:Arial>, <Font:Calibri>, etc...] 

response = JsonResponse({ 
    'foo' : serializers.serialize('json', tmp_fonts), 
}) 

return HttpResponse(response, content_type='application/json') 
+0

あなたはHttpResponseを忘れることができます。 JsonResponseを返すだけです。 JSonResponseは、適切なコンテンツタイプを持つHttpResponseであり、JSONEncoderを使用してJsonに変換するdictionairyとしての入力を受け入れます。だからまだHttpResponseです。 – Melvyn

関連する問題