注册的路由器网址返回404

时间:2019-01-17 14:31:22

标签: python django django-rest-framework django-2.1

我正在使用django和rest-framework开发网站。我有一个用户应用,其中的模型如下所示:

class User(AbstractUser):
    pass

class Comment(models.Model):
    comment_text = models.TextField()
    author = models.ForeignKey(settings.AUTH_USER_MODEL,default=DefaultUser,on_delete=models.SET_DEFAULT,related_name='author')
    # DefaultUser is similar to AnonymousUser in django.contrib.aut.models
    date = models.DateTimeField(default=now)
    class User_Comment(Comment):
    on_user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='on_user',default=DefaultUser)

class User_Comment(Comment):
    on_user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='on_user',default=DefaultUser)

因此,它基本上是一个评论系统,用户可以在该评论系统上对另一个用户发表评论。
我已经使用rest框架序列化程序来发布评论:

class User_CommentSerilizer(serializers.ModelSerializer):
    comment = User_Comment
    class Meta:
       model = User_Comment
       fields = ('comment_text','on_user')
    # extra_kwargs =  {'password': {'write-only': True}}
    def create(self, validated_data):
        comment = User_Comment(
        author= User.objects.filter(username=self.context['request'].user)[0],
        on_user= User.objects.filter(username=validated_data["on_user"])[0],
        validated=False,
        comment_text= validated_data["comment_text"]
    )
    comment.save()
    return comment

,然后在views.py中使用UserCommentViewSet:

class User_CommentViewSet(viewsets.ViewSet):
    serializer_class = User_CommentSerilizer
    queryset = User_Comment.objects.all()

最后在urls文件中,我注册了视图:

router = DefaultRouter()
router.register('profile' , views.UserViewSet)
router.register('comment' , views.User_CommentViewSet)
router.register('login' ,views.LoginViewSet, base_name='login')
urlpatterns = [
    path('users/', include(router.urls)),
]

配置文件和登录路由器工作正常。但是,评论路由器完全不会显示(并返回404),而不会引发任何其他错误。就像路由器未注册。
尽管我确实发现问题与queryset部分有关,但我无法弄清问题是什么。如果有人能解决这个问题,我将非常感谢。

1 个答案:

答案 0 :(得分:1)

该错误仅是因为我在User_CommentViewSet函数中使用的是ViewSet而不是ModelViewSet。