2017-10-08 93 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') 
相關問題