2017-05-24 15 views
0

私はBookとBasketの2つのクラスを持っています。このシナリオでは、バスケットには複数の書籍があります。私はそれらを適切な順序で直列化しなければなりません。私はシリアライズクエリを書いたが、それは動作しません。イムのrunserverをしようとすると、それは0x7f1afe3a8ef0でリストはJSONシリアライズ可能ではありません

homepage.views.Bookオブジェクトが直列化JSON

クラス

class Book(object): 
    def __init__(self,bookId,bookName,bookPrice,bookAuthor,bookYear,bookStar,bookCatagory): 
     self.bookId=bookId 
     self.bookName=bookName 
     self.bookPrice=bookPrice 
     self.bookAuthor=bookAuthor 
     self.bookYear=bookYear 
     self.bookStar=bookStar 
     self.bookCatagory=bookCatagory 



class Basket(object): 
    def __init__(self): 
     self.numberOfProduct = None 
     self.validate = None 
     self.paymentValidate = None 
     self.books = list() 


class UserClass(object): 
    def __init__(self,id,name,surname,address): 
     self.id = id 
     self.name = name 
     self.surname = surname 
     self.address = address 
     self.basket = Basket() 

def dummy(user): 
     book = Book("1","1984","20TL","George Orwell","1999","4","Drama") 
book1 = Book("2", "Verwandlung", "25TL", "Franz Kafka", "2001", "5", "Drama") 
book2 = Book("3", "Game of Thrones", "50TL", "George Martin", "2007", "5", "Drama") 
    user.basket.books.append(book) 
    user.basket.books.append(book1) 
    user.basket.books.append(book2) 


@api_view(['GET']) 
def test(request): 
    query = User.objects.filter(userName="berkin768").first() 
    if (query != None): 
     userId = query.userId 
     name = query.name 
     surname = query.surname 
     address = query.address 
     newUser = UserClass(userId, name, surname, address) 
     dummy(newUser) 

     serializer_class = BasketSerializer(
      data={'userId': newUser.id, 'name': newUser.name, 'surname': newUser.surname, 'address': newUser.address,'book': newUser.basket.books}) 
     serializer_class.is_valid() 

    return Response(serializer_class.data) 

シリアライザ

class BookSerializer(serializers.Serializer): 
    bookId = serializers.IntegerField() 


class BasketSerializer(serializers.Serializer): 
    userId = serializers.IntegerField() 
    name = serializers.CharField(max_length=21) 
    surname = serializers.CharField(max_length=21) 
    address = serializers.CharField(max_length=51) 
    book = BookSerializer(many=True) 

おかげ

ではありません返します
+0

あなたのビューで 'Book'クラスのオブジェクトが使われていて(モデルではない)、それをモデルの行に割り当てています(user.basket.books?) –

答えて

0

このコードはデシリアライズ用です。

あなたが実行しようとしている直列化のために、によって

serializer_class = BasketSerializer(
     data={'userId': newUser.id, 'name': newUser.name, 'surname': newUser.surname, 'address': newUser.address,'book': newUser.basket.books}) 
serializer_class.is_valid() 

置き換える:

serializer_class = BasketSerializer(
     instance={'userId': newUser.id, 'name': newUser.name, 'surname': newUser.surname, 'address': newUser.address,'book': newUser.basket.books}) 
0

あなたのクラスは、Djangoのmodel.Modelsから継承する必要があります。例えば

from django.db import models

class Book(models.Model): bookId= models.IntegerField() bookName= models.CharcField() ...

そうすれば、Djangoの残りFrameworkがシリアライズされます。 :)

関連する問題