Как запретить изменение "статуса" для простого пользователя и оставить его для администратора и поддержки (суперпользователя)?
Простой пользователь либо не должен видеть кнопку статуса, либо она должна быть серой для выбора. Admin(user.is_staff) и Support(user.is_superuser) должны видеть поле и иметь возможность изменить его.
Теперь пользователь может изменить статус билета в представлении Update.
Мой сериализатор:
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