Srinivas
Srinivas

Reputation: 554

Django Rest Framework - Get data with Reverse Lookup not working

I have 3 models book, language, book_language. when i try to get list of books i am unable to get associated languages with django_rest_framework

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')

desired 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'
        }
    ]
 }]

Instead of above output, i am only getting list of books without languages array like below.

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

Also guide where can i find better examples, I tried to read the DRF doc but its not beginner friendly.

Upvotes: 0

Views: 836

Answers (2)

user8060120
user8060120

Reputation:

Try it:

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

Upvotes: 0

Mohammad Mustaqeem
Mohammad Mustaqeem

Reputation: 1084

Try passing many=True like

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

Upvotes: 1

Related Questions