2016-04-25 13 views
2

Ich versuche, einen verschachtelten Serializer in Django REST Framework einzurichten, aber nachdem ich die kurze Anleitung in der Dokumentation, http://www.django-rest-framework.org/api-guide/relations/#nested-relationships, hatte ich keine Änderung in den serialisierten Daten.Django REST Framework geschachtelter Serializer ohne Wirkung

models.py

class Franchise(models.Model): 
    id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=255) 


class Item(models.Model): 
    id = models.AutoField(primary_key=True) 
    franchise = models.ForeignKey(Franchise, on_delete=None) 
    title = models.CharField(max_length=255) 

Initial serializers.py

class ItemListSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Item 
     fields = ('id', 'franchise', 'title') 


class FranshiseDetailSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Franchise 
     fields = ('id', 'name', 'items') 

Wenn ich ItemListSerializer mit einer Abfrage Abfrage erhalte ich wieder die erwartet:

[ 
    { 
     "id": 1, 
     "franchise": 1, 
     "title": "Item 1", 
    }, 
    { 
     "id": 2, 
     "franchise": 1, 
     "title": "Item 2" 
    }, 
    { 
     "id": 3, 
     "franchise": 2, 
     "title": "Item 3", 
    } 
] 

Und das erwartet Ergebnis, wenn ich FranchiseDetailSerializer mit einem bereits bestehenden Franchise-Objekt abfrage.

{ 
    "id": 1, 
    "name": "Franchise 1" 
} 

Nun, wenn ich FranchiseDetailSerializer, gemäß den DRF Leitfaden für verschachtelte Beziehungen ändern:

class FranshiseDetailSerializer(serializers.ModelSerializer): 
    items = ItemListSerializer(many=True, read_only=True) 

    class Meta: 
     model = Franchise 
     fields = ('id', 'name', 'items') 

würde ich erwarten, das folgende Ergebnis:

{ 
    "id": 1, 
    "name": "Franchise 1" 
    "items": [ 
     {"id": 1, "title": "Item 1", "franchise": 1}, 
     {"id": 2, "title": "Item 2", "franchise": 1} 
    ] 
} 

Aber stattdessen ich get keine Änderung, als ob ich nicht FranchiseDetailSerializer überhaupt aktualisiert hätte:

{ 
    "id": 1, 
    "name": "Franchise 1" 
} 

Das Schlimmste an dem für mich ist, dass ich bin nicht jede Art von Störung zu erhalten, bin ich einfach nicht Ergebnisse zu sehen.

Alle und alle Hilfe ist dankbar, danke.

Antwort

4

Eigentlich verpasst Sie einen winzigen Teil von docs :)

album = models.ForeignKey (Album, related_name = 'Tracks')

related_name definieren in ForeignKey

franchise = models.ForeignKey(Franchise, on_delete=None, related_name='items') 

Danach begann das Zeug für mich zu arbeiten.

+1

Super, das funktioniert, vielen Dank :) – 99lives

Verwandte Themen