drf将序列化器字段扩展为外键,但未设置默认的view_name base_name

时间:2019-05-08 20:04:01

标签: python django django-rest-framework

我正在研究带有dff扩展名的Django Rest Framework示例实现,用于嵌套路由。

开始我的模型很简单

class BlogPost(models.Model):
    owner = models.ForeignKey(User,related_name='bposts',on_delete=models.CASCADE,editable=False)
    title = models.CharField("Blog Title",max_length = 30)
    content = models.CharField("Blog content",max_length=200)

    def __str__(self):
        return self.title

class Comments(models.Model):
    owner = models.ForeignKey(User,related_name='cposts',on_delete=models.CASCADE,editable=False)
    comment = models.CharField("Comment",max_length=50)
    blogpost = models.ForeignKey(BlogPost,related_name='Comments',on_delete=models.CASCADE,editable=True)

    def __str__(self):
        return self.comment

我的视图集也很简单

class BlogPostViewSet(NestedViewSetMixin,viewsets.ModelViewSet):

    queryset = BlogPost.objects.all()
    serializer_class = BlogPostSerializer   

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)


class CommentViewSet(NestedViewSetMixin,viewsets.ModelViewSet):

    queryset = Comments.objects.all()

    serializer_class = CommentSerializer

我的路线设置为预期的样子,

from rest_framework_extensions.routers import (
    ExtendedDefaultRouter as DefaultRouter
)


router = DefaultRouter()

m_router = router.register(r'users', views.UserViewSet, base_name='user')
m_router.register(r'BlogPosts',
        views.BlogPostViewSet,
                base_name='user-BlogPosts',
                parents_query_lookups=['owner']
            ).register(r'Comments',views.CommentViewSet,
                            base_name='user-BlogPosts-Comments',
                            parents_query_lookups=['owner','blogpost']
                )

最后,我的序列化器也是一个基本设置

class BlogPostSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = BlogPost
        fields = ('id','owner','title','content')

class CommentSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Comments
        fields = ('id','owner','comment',blogpost)

当我打开django rest框架API浏览器时,所有的URL映射都根据需要是正确的。

我遇到的问题是在Blogpost字段上的CommentsSerializer上,出现无法解析URL错误。

该问题是由于它查找博客帖子详细信息而不是像其建议的那样查找user-BlogPosts-detail。有没有一种方法可以强制它使用user-BlogPosts-detail appose作为路由器提供的默认值。

我已经到处寻找它,但是没有一种解决方案可以解决这个问题。

0 个答案:

没有答案