Django Rest Framework - 使用反向查找获取数据不起作用

时间:2017-10-08 16:30:52

标签: python django django-rest-framework

我有3个模型book, language, book_language。当我尝试获取书籍列表时,我无法通过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')

所需的输出:

 [{
    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'
        }
    ]
 }]

而不是上面的输出,我只得到没有语言数组的书籍列表,如下所示。

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

还指导我在哪里可以找到更好的例子,我试着阅读DRF doc,但它不是初学友好的。

2 个答案:

答案 0 :(得分:0)

尝试传递many=True之类的

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

答案 1 :(得分:0)

试一试:

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