Django - 允许指定用户修改某些模型字段

时间:2017-11-16 19:56:52

标签: django django-rest-framework django-permissions

我需要允许模型中指定的某个用户修改一些模型的字段。我知道我需要创建一个权限类,它将控制整个过程,但我不知道如何做到这一点。 这是代码示例:

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,并忽略所有其他更改,或者是否可以创建一个允许这样做的权限。

2 个答案:

答案 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)