2017-10-08 92 views
0

我有3个模型book, language, book_language。当我试图让书单我无法获得相关的语言与django_rest_frameworkDjango 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但它不是初学者友好。

回答

0

尝试通过many=True

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

我得到这个错误'Book对象具有当我使用多=真 – Srinivas

+0

有一个基本没有属性“language_set'.'您的模型中存在缺陷。我可以知道,为什么你没有把语言作为外语在书中? –

+0

我猜,一本书可以有多种语言?对?那么,在这种情况下,你应该使用多对多的领域。 –

0

试试:

class BookSerializer(serializers.ModelSerializer): 
    languages = BookLanguageSerializer(source='book_language_set') 
相关问题