Используя DRF для настройки платформы, где пользователи могут обмениваться контентом, у меня возникают проблемы с проверкой того, совпадает ли автор с зарегистрированным пользователем.
Пример модели контента:
class Post(models.Model):
date = models.DateTimeField()
author = models.ForeignKey(User)
content = models.CharField(max_length=512)
Сериализатор контента:
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
Просмотр содержимого:
@authentication_classes((SessionAuthentication, BasicAuthentication,))
@permission_classes((IsAuthenticated,))
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
http_method_names = ['get', 'post', 'head', 'options',]
Я хочу, чтобы почтовые запросы выполняли тест post.author == request.user перед сохранением сообщения.
С одной стороны, моя интуиция подсказывает мне, что я должен перезаписать метод создания представления таким кодом (не тестировался, но здесь я просто хочу дать представление о том, что я хочу сделать):
class PostViewSet(viewsets.ModelViewSet):
[...]
def create(self, request):
post = self.get_object()
serializer = PostSerializer(data=request.data)
if serializer.is_valid():
if serializer.validated_data.author == request.user:
serializer.save()
return Response({'message': 'Post saved !'})
else:
return Response({'message': 'You can't post for someone else'})
else:
return Response({'message': 'Not valid...'})
С другой стороны, когда я ищу подобные проблемы в своей любимой поисковой системе, я могу найти только ответы, которые включают перезапись методов создания/обновления в классе сериализатора.
Я не очень хорошо знаком ни с rest api, ни с DRF, но я запутался, потому что то, о чем я говорю, является своего рода пользовательским разрешением (разрешения обрабатываются в представлениях, верно?).
Ищу полезные советы :)