我正在使用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部分有关,但我无法弄清问题是什么。如果有人能解决这个问题,我将非常感谢。
答案 0 :(得分:1)
该错误仅是因为我在User_CommentViewSet函数中使用的是ViewSet而不是ModelViewSet。