Django - 允许指定用户修改某些模型字段
Django - allowing specified user to modify certain model fields
我需要允许模型中指定的特定用户修改模型的一些字段。我知道我需要创建一个权限 class,它将控制整个过程,但我不知道该怎么做。
这是代码示例:
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,不确定是否有帮助。
我应该创建一个方法来检查用户是否 == 目标,并忽略所有其他更改,或者是否可以创建一个权限来执行此操作。
您可以使用群组,为该群组分配特定权限并将您的目标用户放入您的群组,只需前往管理站点设置群组。希望对你有帮助。
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)
我需要允许模型中指定的特定用户修改模型的一些字段。我知道我需要创建一个权限 class,它将控制整个过程,但我不知道该怎么做。 这是代码示例:
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,不确定是否有帮助。 我应该创建一个方法来检查用户是否 == 目标,并忽略所有其他更改,或者是否可以创建一个权限来执行此操作。
您可以使用群组,为该群组分配特定权限并将您的目标用户放入您的群组,只需前往管理站点设置群组。希望对你有帮助。
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)