Django rest framework 在DRF中的序列化程序验证期间获取实例

Django rest framework 在DRF中的序列化程序验证期间获取实例,django-rest-framework,Django Rest Framework,我开始为我已经开发的一个小型reddit项目工作 问题是我陷入了这样的境地: 一个Minisub就像一个subreddit。除其他外,它还有一个名为managers的字段,它是manytomy和User Ad是一种广告,它将显示在minisub上,并且它有一个名为minisubs的字段,该字段与minisub一起manytomy。它还有一个作者字段,外键为用户 我想允许这些经理通过DRFAPI在他们的迷你们车上添加一些广告。它实际上在工作。但我想检查一下,他们是否只在他们是经理的地方加入了min

我开始为我已经开发的一个小型reddit项目工作

问题是我陷入了这样的境地:

一个
Minisub
就像一个subreddit。除其他外,它还有一个名为
managers
的字段,它是
manytomy
User

Ad
是一种广告,它将显示在minisub上,并且它有一个名为
minisubs
的字段,该字段与
minisub
一起
manytomy
。它还有一个
作者
字段,外键为
用户

我想允许这些经理通过DRFAPI在他们的迷你们车上添加一些广告。它实际上在工作。但我想检查一下,他们是否只在他们是经理的地方加入了
minisubs

我找到了这样的方法:

类AdSerializer(序列化程序.HyperlinkedModelSerializer):
# ...
def validate_minisubs(自身,值):
对于m值:
如果用户不在m.managers.all()中:
引发序列化程序。ValidationError(“…”)
返回值
我的问题是:如何获得
用户
?我找不到方法获取值
Ad.author
(此字段根据用户身份验证在串行数据中自动设置)。也许我找不到办法,因为没有办法?做这件事的地方在别的地方


提前感谢。

我相信这是的工作,如果您正在执行CRUD操作以将其插入数据库,那么如果用户是管理员,则您可以让权限类返回
True

权限实例可以访问该请求,您可以使用该请求获取用户并检查他是否是经理:

您可以通过以下方式将其从序列化程序中取出:

class YourModelSeializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model=YourModel
    
    def validate_myfield(self):
        instance = getattr(self, 'instance', None)
        ...



问题是,我不想只知道他是一名经理,而是想知道他是他试图发布的
Ad
minisubs
字段中所有
minisubs
的经理。这难道不能从对用户对象的查询中派生出来吗?一旦你进入了你正在编写的自定义权限类的主体,你就可以自由地从数据库中查找任何内容,以得出
True
False
的结论。一旦在权限中,我就可以访问数据库中我需要的所有内容,是的。但问题是我必须对请求中的数据进行反序列化,以检查用户输入的内容是否合法。无论如何,我终于找到了(如何使用
self.context['request']]在
validate_minisubs
方法中获取用户。用户
。感谢您的时间!