2017-10-08 4 views
0

J'ai 3 modèles book, language, book_language. lorsque je tente d'obtenir la liste des livres que je ne peux pas obtenir des langues associées avec django_rest_frameworkDjango Rest Framework - Obtenir des données avec Reverse Lookup ne fonctionne pas

models.py

class Book(models.Model): 
    title = models.CharField(max_length=200) 
    year = models.IntegerField() 

class Language(models.Model): 
    language_name = models.CharField(max_length=100) 


class Book_language(models.Model): 
    book = models.ForeignKey(Book) 
    language = models.ForeignKey(Language) 

serializers.py

class BookLanguageSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Book_language 
     fields = ('id', 'language',) 

class BookSerializer(serializers.ModelSerializer): 
    languages = BookLanguageSerializer(source='language_set') 

    class Meta: 
     model = Book 
     fields = ('id', 'title', 'languages') 

souhaité ouput:

[{ 
    id: 1, 
    title: 'some book 1', 
    languages: [ 
     { 
      id: 1, 
      language: 'english' 
     }, 
     { 
      id: 2, 
      language: 'chinese' 
     } 
    ] 
}, 
{ 
    id: 2, 
    title: 'some book 2', 
    languages: [ 
     { 
      id: 1, 
      language: 'english' 
     }, 
     { 
      id: 2, 
      language: 'chinese' 
     } 
    ] 
}] 

Au lieu de la sortie ci-dessus, je reçois seulement la liste des livres sans tableau de langues comme ci-dessous.

[{ 
    id: 1, 
    title: 'some book 1', 
}, 
{ 
    id: 2, 
    title: 'some book 2', 
}] 

aussi Guide Où puis-je trouver de meilleurs exemples, j'ai essayé de lire le DRF doc mais ses pas débutants amical.

Répondre

0

Essayez de passer many=True comme

class BookSerializer(serializers.ModelSerializer): 
    languages = BookLanguageSerializer(source='language_set', many=True) 
+0

Je suis arrivé cette erreur objet 'livre n'a pas d'attribut « language_set'.' quand je l'utilise beaucoup = True – Srinivas

+0

Il y a une base défaut dans vos modèles. Puis-je savoir, pourquoi n'avez-vous pas mis la langue comme clé étrangère dans le livre? –

+0

Je suppose, un livre peut avoir plusieurs langues? droite? alors, dans ce cas, vous devez utiliser plusieurs champs. –

0

Essayez:

class BookSerializer(serializers.ModelSerializer): 
    languages = BookLanguageSerializer(source='book_language_set')