检索DRF中的外键信息

时间:2015-04-11 10:39:00

标签: django django-rest-framework

我是DRF的新手 - 非常感谢这里的一些帮助。

我有这样的模特关系:

class Book(models.Model):
    user = models.ForeignKey(User, related_name=“books”)
    ..

class Chapter(models.Model)
    book = models.ForeignKey(Book, related_name=“chapters”)
    ..

在创建新图书时,我可以通过访问request.user中的信息并覆盖perform_create来链接到用户。

如何在创建新Chapter时获得类似的行为,即获取外键Book?我知道它可以通过请求参数传递,但我无法找到如何让用户在POST请求中提供Book ID /名称并将其链接到新创建的Chapter

我的序列化器看起来像这样:

class ChapterSerializer(serializers.ModelSerializer):
    book = BookSerializer()
    class Meta:
        model = Chapter

观点是:

class ChapterList(generics.ListCreateAPIView):
    serializer_class = ChapterSerializer
    permission_classes = (permissions.IsAuthenticated,)
    def get_queryset(self):
        return Chapter.objects.filter(book__in=Book.objects.filter(user=self.request.user))

1 个答案:

答案 0 :(得分:0)

因为当你想要创建一个新的第一章事物时,这本书已经存在,最好的方法是使用你指定bookid的url:

url(r'^books/(?P<pk>[0-9]+)/chapters/$', ChapterList.as_view(), name='api_chapters'),

通过这种方式,您可以获取图书实例并将章节链接到该实例。 在视图中,您可以获得如下图书ID:

book_id = kwargs.get('pk')