Автоматическая установка автора при POST

Я работаю над приложением для администрирования событий на основе Django APIRest. Когда пользователь публикует событие, он считается автором, и мне интересно, какой самый элегантный/профессиональный способ сделать это:

  1. Переопределите представление post
  2. Переопределите метод создания модели
  3. Определите метод сохранения сериализатора

Вот что у меня есть на данный момент (вариант 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 является обязательным.

Вернуться на верх