Как запретить изменение "статуса" для простого пользователя и оставить его для администратора и поддержки (суперпользователя)?

Простой пользователь либо не должен видеть кнопку статуса, либо она должна быть серой для выбора. Admin(user.is_staff) и Support(user.is_superuser) должны видеть поле и иметь возможность изменить его.

Теперь пользователь может изменить статус билета в представлении Update.

enter image description here

Мой сериализатор:

class TicketSerializerUpdate(serializers.ModelSerializer):
    user = serializers.HiddenField(default=serializers.CurrentUserDefault())
    status = Status.objects.all()

    class Meta:
        model = Ticket
        fields = "__all__"

Мои модели Тикет и статус:

class Status(models.Model):
    status = models.CharField(max_length=150)
    desc_status = models.TextField()

    def __str__(self):
        return self.status


class Ticket(models.Model):
    title = models.CharField(max_length=150)
    text = models.TextField()
    status = models.ForeignKey(Status, on_delete=models.PROTECT, default=2)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    time_create = models.DateTimeField(auto_now_add=True)
    time_update = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

Разрешения файлов теперь не имеют ничего для решения проблемы, и я не имею никакой идеи. Я думаю, что это простая проблема, если вам нужно больше информации, вы можете запросить меня)

Вы можете использовать разные сериализаторы для разных пользователей в вашем представлении, используя get_serializer_class():

class SimpleUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = Ticket
        fields = "__all__"
        read_only_fields =  ('status',)

class AdminUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = Ticket
        fields = "__all__"

class ExampleView(viewsets.ModelViewSet):    
    ...
    def get_serializer_class(self):
        if self.request.user.is_admin:
            return AdminUserSerializer
        return SimpleUserSerializer
Вернуться на верх