注册路由器 url returns 404
registered router url returns 404
我正在使用 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)),
]
配置文件和登录路由器工作正常。然而,评论路由器根本没有显示(和 returns 404)而没有引发任何其他错误。好像路由器没有注册。
我无法弄清楚问题是什么,虽然我确实发现它与查询集部分有关。如果有人能解决这个问题,我将不胜感激。
这个错误仅仅是因为我在 User_CommentViewSet 函数中使用了 ViewSet 而不是 ModelViewSet。
我正在使用 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:
中使用 UserCommentViewSetclass 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)),
]
配置文件和登录路由器工作正常。然而,评论路由器根本没有显示(和 returns 404)而没有引发任何其他错误。好像路由器没有注册。
我无法弄清楚问题是什么,虽然我确实发现它与查询集部分有关。如果有人能解决这个问题,我将不胜感激。
这个错误仅仅是因为我在 User_CommentViewSet 函数中使用了 ViewSet 而不是 ModelViewSet。