Django Rest框架:创建博客时如何自动保存当前用户为作者?
自动设置当前用户为博客作者的实现方案
1. 调整模型字段(models.py)
首先修改Blog模型的author字段,移除blank=True和null=True参数——既然要自动填充作者,就不需要允许该字段为空:
class Blog(models.Model): author = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE) # 强制必填,自动填充 blog_title = models.CharField(max_length=200, unique=True)
2. 配置序列化器(serializers.py)
将author字段设为只读,避免前端提交自定义值,同时保留返回时的作者信息:
class BlogSerializer(serializers.ModelSerializer): class Meta: model = Blog fields = '__all__' # 或明确指定需要的字段,比如['blog_title', 'author'] read_only_fields = ['author'] # 标记为只读,禁止前端传入
3. 重写视图创建逻辑(views.py)
在BlogViewSet中添加perform_create钩子方法,创建博客时自动把当前登录用户赋值给author字段:
class BlogViewSet(viewsets.ModelViewSet): queryset = Blog.objects.all().order_by('-id') serializer_class = BlogSerializer pagination_class = BlogPagination lookup_field = 'blog_slug' def get_permissions(self): if self.action in ['retrieve', 'list']: permission_classes = [IsOwnerOrReadOnly] else: permission_classes = [IsOwnerOrReadOnly & IsAuthorGroup] return [permission() for permission in permission_classes] # 自动绑定当前登录用户为博客作者 def perform_create(self, serializer): serializer.save(author=self.request.user)
这样配置后,用户创建博客时无需手动选择作者,系统会自动将当前登录用户设为该博客的作者。
内容的提问来源于stack exchange,提问作者boyenec
相关产品推荐
相关产品推荐

