2017-11-16 10 views
0

モデルで指定された特定のユーザーがモデルのフィールドのいくつかを変更できるようにする必要があります。私はプロセス全体を制御するパーミッションクラスを作成する必要があることを知っていますが、それをどうするかわかりません。 は、ここでのコードサンプルです:Django - 指定されたユーザーが特定のモデルフィールドを変更できるようにする

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を使用していますが、それが役立つかどうかはわかりません。 メソッドを作成して、ユーザー== targetかどうかをチェックし、他のすべての変更を無視するか、それを行う権限を作成できるかどうかを確認する必要があります。

答えて

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) 
0

グループを使用して、そのグループに対して特定の権限を割り当て、ターゲットユーザーをグループに入れることができます。グループを設定するには管理サイトに移動する必要があります。これがあなたのお役に立てば幸いです。

+0

は、私が持っている問題は、すべてのユーザーがタスクを作成し、仕上げのための責任者を指定することができ、事実である答え いただきありがとうございますタスク(ターゲット)。 私が正しい場合、特定のタスクにグループの権限を割り当てることはできません。 –

+0

それらを作成、編集、削除する権限が異なると、誰もが作成権限を持つことができますが、特定のgoupのみが編集や削除を許可します。 –

関連する問題