2016-12-13 1 views
3

모든 사양의 제품 목록이 있습니다. 이제는 한 번에 10 개 제품의 페이지 매김을 사용하여 해당 목록의 JsonResponse를 보내려고합니다. 나는 그것이 나에게 오류를 제공하는 모든 제품<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'에서 단순히 손()'. 사전과 같은 간단한 파이썬 구조로 객체를 직렬화해야합니다. –

+2

코드가 해당 오류를 생성하지 않는다는 것을 알립니다. 실제 코드를 게시 할 수 있습니까? 또한 DRF를 사용하고 있는지 알려주십시오. – 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

당신은 핵심 패키지에서

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을 참조하십시오.

관련 문제