You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Django中子用户编辑父用户的文章对象?

解决方案:支持子用户编辑父用户文章

先修正原有校验逻辑的错误,再新增子用户编辑父文章的权限判断:

原有逻辑的问题

  1. 错误引用不存在字段:Article模型没有parent属性,需针对文章的author字段做关联判断
  2. 自身编辑逻辑错误:attrs.get('id')取的是文章ID,而非用户ID,应对比文章作者ID与当前用户ID
  3. 缺少子用户编辑父用户文章的判断分支

修正后的序列化器代码

from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from .models import Article, User

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ("id","author","caption","timestamp")

    def validate(self, attrs):
        attrs = super().validate(attrs)
        request_user = self.context['request'].user
        # 获取文章作者:创建场景从attrs取,更新场景从instance取
        article_author = attrs.get('author') or self.instance.author

        # 情况1:用户编辑自己的文章
        if article_author.id == request_user.id:
            return attrs
        # 情况2:父用户编辑子用户的文章(文章作者是当前用户的子账号)
        if article_author.parent_id == request_user.id:
            return attrs
        # 情况3:子用户编辑父用户的文章(当前用户的父账号是文章作者)
        if request_user.parent_id == article_author.id:
            return attrs
        
        raise ValidationError('Unauthorized Request')

逻辑说明

  • 兼容创建/更新场景的文章作者获取:创建时从传入的attrs取author,更新时从已存在的文章instance取author
  • 三种合法权限分支:
    • 用户操作自己的文章,直接通过校验
    • 父用户操作子账号的文章(子账号的parent字段指向当前用户),通过校验
    • 子用户操作父账号的文章(当前用户的parent字段指向文章作者),通过校验
  • 不符合以上场景则抛出权限错误

内容的提问来源于stack exchange,提问作者user14491987

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:51:18