我是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))
答案 0 :(得分:0)
因为当你想要创建一个新的第一章事物时,这本书已经存在,最好的方法是使用你指定bookid的url:
url(r'^books/(?P<pk>[0-9]+)/chapters/$', ChapterList.as_view(), name='api_chapters'),
通过这种方式,您可以获取图书实例并将章节链接到该实例。 在视图中,您可以获得如下图书ID:
book_id = kwargs.get('pk')