Как запретить вошедшему пользователю публиковать сообщение, используя имя другого пользователя в django rest framework
В моем проекте Django rest framework я хочу сделать так, чтобы, например, если testuser1 вошел в систему, при создании поста нельзя было в части author выбрать testuser2 и опубликовать пост с автором testuser2. Как я могу сделать так, чтобы только зарегистрированный пользователь создавал пост?
my models.py
from turtle import title
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
body = models.TextField()
created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
my views.py
from django.shortcuts import render
from rest_framework import generics, permissions
from .models import Post
from .serializers import PostSerializer
from .permissions import IsAuthorOrReadOnly
class PostList(generics.ListCreateAPIView):
#permission_classes = (permissions.IsAuthenticated,)
queryset = Post.objects.all()
serializer_class = PostSerializer
class PostDetail(generics.RetrieveUpdateDestroyAPIView):
permission_classes = (IsAuthorOrReadOnly,)
queryset = Post.objects.all()
serializer_class = PostSerializer
my serializers.py
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
fields = ('id', 'author', 'title', 'body', 'created_at',)
model = Post
my permissions.py
from re import T
from tkinter.tix import Tree
from rest_framework import permissions
class IsAuthorOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
# Read-only permissions are allowed for any request
if request.method in permissions.SAFE_METHODS:
return True
# Write permissions are only allowed to the author of a post
return obj.author == request.user
использование perform_create сработало для меня
def perform_create(self, serializer):
serializer.save(author = self.request.user)