2016-12-13 17 views
3

すべての仕様のすべての製品のリストがあります。 これで、JsonResponseとそのリストを10ページ分のページ付けで一度に送信したいと考えています。 は、私はそれは私にエラーを与えて、すべての製品<object>はJSONシリアライズ可能ではありませんdjango

all_pro = Products.objects.all() 
return HttpResponse(all_pro) 

を送信しようとすると、JSONシリアライズ可能ではありません。

私の製品モデル

class Products(models.Model): 
    product_name = models.CharField(max_length=50,null=True, blank=True) 
    category = models.CharField(max_length=100, null=True, blank=True) 
    price = models.IntegerField(default=0,null=True, blank=True) 
    posting_date = models.DateTimeField(auto_now_add=True, blank=True) 
    quantity = models.IntegerField(default=1,null=True, blank=True) 
    extra_text = models.TextField(null=True, blank=True) 
    color = models.CharField(max_length=50,null=True, blank=True) 
    contact_number = models.CharField(max_length=50,null=True, blank=True) 
    is_active = models.BooleanField(default=True) 

だから、どのように私は、フロントエンドにJsonResponseを送ることができます。 ありがとうございます。私はJSONオブジェクト

+0

ことはできたHttpResponse 'へ' QuerySet'ではない、単に手() '。オブジェクトを、辞書のような単純なPython構造にシリアル化する必要があります。 –

+2

コードではそのエラーが発生していません。実際のコードを投稿できますか? – e4c5

+0

私はDRFを使用していません –

答えて

1

上記の方法はすべて良好です。しかし、私は

data = Products.objects.all().values('product_name', 'category', 'price') 
return JsonResponse(list(all_pro)) 

を好むJsonResponseが

from django.http import JsonResponse

からインポートすることができますまた、これはあなたのクエリがデータベースからのみ必要なフィールドをフェッチを確認します。

サンプル応答:

[{'product_name':'Data1', 'category':'cat1', 'price':10},{'product_name':'Data2', 'category':'cat2', 'price':5}] 
0

を送りたい

DRF私が使用していない あなたは JSONにモデルオブジェクトをシリアル化し、応答を返すためにserializerを作成する必要があります。あなたがDjango Rest Frameworkを使用している場合たとえば、あなたがファイルを作成することとしてserialzers.py:あなたのviews.pyで次に

from models import Products 
from rest_framework import serializers 


class ProductsSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Products 

、あなたはそれを呼び出す必要がありますが好き:

from serializers import ProductsSerializer 

all_pro = Products.objects.all() 
data = ProductsSerializer(all_pro).data # serialize the data 
return HttpResponse(data) 
+0

これはDRFを使用していることを前提にしていますが、その質問の証拠はありません。 –

+0

私はDRFを使用していません –

+0

これは私の問題を解決していません。 –

2

あなたは、コアパッケージからDjangoのシリアライザを使用することができます

from django.core import serializers 
all_pro = Products.objects.all() 
data = serializers.serialize('json', all_pro, fields=('product_name','category',)) 
return HttpResponse(data) 

しかし、私はを使用することをお勧めします210またはtastypieを参照してください。

関連する問題