我正在研究带有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作为路由器提供的默认值。
我已经到处寻找它,但是没有一种解决方案可以解决这个问题。