我开始使用Django REST framework处理我已经开发的mini-reddit项目。
问题是我遇到了这种情况:
Minisub
就像一个subreddit。除其他外,它还有一个名为managers
的字段ManyToMany
User
。
Ad
是一个广告,将显示在minisub上,它有一个名为minisubs
的字段ManyToMany
Minisub
。它还有一个author
字段,带有User
的外键。
我想允许这些管理员通过DRF API在其minisub上添加一些广告。它实际上是有效的。但是我想检查一下,他们只将minisubs
放在他们是经理的小管中。
我找到了这样的方式:
class AdSerializer(serializers.HyperlinkedModelSerializer):
# ...
def validate_minisubs(self, value):
for m in value:
if user not in m.managers.all():
raise serializers.ValidationError("...")
return value
我的问题是:如何获得user
?我找不到获取值Ad.author
的方法(根据用户身份验证,此字段在串行数据中自动设置)。也许我找不到办法因为没办法?这样做的地方是在其他地方吗?
提前致谢。
答案 0 :(得分:1)
我认为这是permissions的工作,如果您正在执行CRUD操作以将其插入数据库,那么如果用户是经理,则可以让权限类返回True
。
权限实例可以访问您可以用来获取用户并检查他是否是经理的请求: http://www.django-rest-framework.org/api-guide/permissions/#custom-permissions
答案 1 :(得分:0)
您可以通过以下方式将其从序列化器中删除:
class YourModelSeializer(serializers.HyperlinkedModelSerializer):
class Meta:
model=YourModel
def validate_myfield(self):
instance = getattr(self, 'instance', None)
...