我正在用DRF构建一个项目,我试图了解模型视图集是如何工作的,我发送了一个如下的URL:localhost/do_somthing/object_id/
并使用以下命令对其进行路由:
router.register('do_somthing', views.do_somthing, basename='do_somthing')
观点是:
class do_somthing_View(viewsets.ModelViewSet):
serializer_class = ObjectSerializer
permission_classes = [permissions.IsAuthenticated]
queryset = Object.objects.all()
http_method_names = ['get']
def get_queryset(self):
obj= Object.objects.get(id=self.kwargs['pk'])
user = self.request.user
if user == obj.user:
obj.att= True
obj.save
return self.queryset
else:
None
对象模型如下所示:
class Object(models.Model):
user= models.ForeignKey(User, on_delete=models.PROTECT, related_name="realted_user")
name= models.CharField(max_length=50)
att= models.BooleanField(default=False)
def __str__(self):
return self.name
问题是att永远不会改变,并且仍然设置为False,有没有更好的方法可以改变属性并返回对象BTW我试图返回一个未经授权的响应时,它不是那个用户,但我不能返回一个响应,如果有人可以请帮助我,甚至可以建议一个更好的方法来做,这将帮助我很多,谢谢
我正在尝试呈现一个对象,当它由正确的用户呈现时,更改该对象的属性
1条答案
按热度按时间pgvzfuti1#
首先,您需要调用
save
方法,将obj.save
更改为obj.save()
,并且不要忘记在kwargs的路径中添加参数。我强烈建议创建一个继承自IsAuthenticated
的自定义权限类并重写has_object_permission
,它将为您完成整个任务它确保它是用户的,如果不是,它将返回403(这发生在drf默认异常处理程序中),如果您不想这样做,但仍然希望得到403响应,请执行以下操作:我仍然强烈建议您使用自定义权限类,并将逻辑部分移出
get_queryset