Автоматическая установка автора при POST
Я работаю над приложением для администрирования событий на основе Django APIRest. Когда пользователь публикует событие, он считается автором, и мне интересно, какой самый элегантный/профессиональный способ сделать это:
- Переопределите представление post
- Переопределите метод создания модели
- Определите метод сохранения сериализатора
Вот что у меня есть на данный момент (вариант 1) В models.py:
class Events(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=200)
dateday = models.DateTimeField()
start_hour = models.TimeField(null=True)
end_hour = models.TimeField(null=True)
author = models.ForeignKey(Users, on_delete=models.CASCADE)
Сериализаторы.py:
#...
class EventsSerializer(serializers.ModelSerializer):
class Meta:
model = Events
fields = '__all__'
class UsersSerializer(serializers.ModelSerializer):
events = EventsSerializer(many=False,read_only=True)
class Meta:
model = Users
fields = '__all__'
extra_kwargs = {'password': {'write_only': True}}
#...
Виды.py:
#...
class EventsList(ListCreateAPIView):
queryset = Events.objects.all()
serializer_class = EventsSerializer
def post(self, request):
request.data['author'] = request.user.pk
return super().post(request)
#...
Это работает, но мне все еще нужно предотвратить изменение автора в PUT-запросе. Есть ли лучший способ минимизировать код или сделать его многоразовым?
Я попробовал решение здесь:
class EventsList(ListCreateAPIView):
queryset = Events.objects.all()
serializer_class = EventsSerializer
def perform_create(self, serializer):
serializer.save(author=self.request.user)
но это не работает: на POST с телом без автора в ответ приходит сообщение, что поле author является обязательным.