我需要允许模型中指定的某个用户修改一些模型的字段。我知道我需要创建一个权限类,它将控制整个过程,但我不知道如何做到这一点。 这是代码示例:
class Task(models.Model):
creator = models.ForeignKey('auth.User', related_name='created_tasks', on_delete=models.CASCADE)
target = models.ForeignKey(User, related_name='assigned_tasks', on_delete=models.CASCADE)
title = models.CharField(max_length=100)
description = models.TextField()
created = models.DateTimeField(auto_now_add=True)
deadline = models.DateTimeField()
priority = models.CharField(max_length=50, choices=PRIORITY_CHOICES, default='NORMAL')
progress = models.CharField(max_length=50, choices=PROGRESS_CHOICES, default='ASSIGNED')
is_finished = models.BooleanField(default=False)
所以我想允许目标,只修改进度和is_finished字段。
我正在使用DjangoRestFramework,不确定这是否有帮助。 我应该创建一个方法,它将检查user == target,并忽略所有其他更改,或者是否可以创建一个允许这样做的权限。
答案 0 :(得分:0)
您可以使用群组,为该群组分配特定权限并将目标用户置于群组中,只需转到管理网站即可设置群组。希望这能帮助你。
答案 1 :(得分:0)
<强> serializers.py 强>
from rest_framework import serializers
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
exclude = ()
def update(self, instance, validated_data):
if self.context['request'].user == specified_user:
setattr(instance, 'progress', validated_data.get('progress', None))
setattr(instance, 'is_finished', validated_data.get('is_finished', None))
instance.save()
return instance
return super(TaskSerializer, self).update(instance, validated_data)