2016-08-10 3 views
1

Ich habe ein Problem in benutzerdefinierten Serialisierung und ich sehe in der Dokumentation für Stunden, aber ich konnte nicht herausfinden, was ich tun werde. Ich habe Serialisierungsobjekt wie unten geschachtelt, aber ich möchte nicht geschachteltes Objekt haben, kann mir jemand dabei helfen?Django-RestFramework Benutzerdefinierte Serialization

verschachteltes Objekt:

{ 
    "id": 1, 

    "adDate": "20-08-2016", 
    "price": "30.50", 
    "city": "Istanbul", 
    "latitude": "28.987509", 
    "longitude": "41.040353", 
    "isPublished": true, 
    "book": { 
     "id": 1, 
     "bookName": "GameOfThrones", 
     "category": "Adventure", 
     "photo": "http://localhost:8000/media/advert_images/game_of_thrones.jpg", 
     "description": "Adventure Book", 
     "author": "Emre Yavuz", 
     "language": "Sangridce", 
     "publicationDate": "2023", 
     "publisher": "Deu_Yapim", 
     "edition": "22", 
     "page_number": 900 
    } 
} 

Nicht verschachteltes Objekt:

{ 
    "id": 1, 

    "adDate": "20-08-2016", 
    "price": "30.50", 
    "city": "Istanbul", 
    "latitude": "28.987509", 
    "longitude": "41.040353", 
    "isPublished": true, 


    "bookName": "GameOfThrones", 
    "category": "Adventure", 
    "photo": "http://localhost:8000/media/advert_images/game_of_thrones.jpg", 
    "description": "Adventure Book", 
    "author": "Emre Yavuz", 
    "language": "Sangridce", 
    "publicationDate": "2023", 
    "publisher": "Deu_Yapim", 
    "edition": "22", 
    "page_number": 900 

} 

Meine Serializer Klasse:

class AdvertSerializer(serializers.ModelSerializer): 

    book = BookSerializer() 

    class Meta(object): 
     model = Advert 
     fields = ('id', 'adDate', 'price',"city","latitude","longitude","isPublished",'book','seller') 
     depth = 2 

.

class BookSerializer(serializers.ModelSerializer): 

    photo = serializers.ImageField(max_length=None,use_url=True) 
    class Meta(object): 
     model = Book 

Antwort

0

Ich weiß nicht, warum Sie eine nicht verschachtelte Darstellung aber um das zu archivieren bevorzugen, müssen Sie Buch Felder angeben, die source Feld Attribut eins nach dem anderen auf dem Serializer verwenden.

class AdvertSerializer(serializers.ModelSerializer): 
    book_name = serializer.CharField(source='book.bookName') 
    description = serializer.CharField(source='book.description') 
    # add the rest of the book fields in that way 


    class Meta(object): 
     model = Advert 
     fields = ('id', 'adDate', 'price',"city","latitude","longitude","isPublished",'book','seller') 
Verwandte Themen