Reputation: 133
I have Post model:
class Post(models.Model):
title = models.CharField(max_length=50)
text = models.CharField(max_length=1000)
published_date = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
And a view:
@api_view(['GET', 'POST'])
def posts(request):
if request.method == 'GET':
post_list = Post.objects.all()
serializer = PostSerializer(post_list, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = PostSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors)
And serializer:
class PostSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only=True)
author = UserSerializer(read_only=True)
category = CategorySerializer(read_only=True)
author_id = serializers.IntegerField(write_only=True)
category_id = serializers.IntegerField(write_only=True)
class Meta:
model = Post
fields = ('id', 'title', 'text', 'published_date', 'author', 'category', 'category_id', 'author_id')
I want to send POST request like {"title":"some title", "text":"some text", "category_id"=1}, so that author_id will be automatically current user id. How can I do this?
Upvotes: 0
Views: 490
Reputation: 1551
In the view, pass the current user to serializer.save() during the POST.
def posts(request):
if request.method == 'GET':
post_list = Post.objects.all()
serializer = PostSerializer(post_list, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = PostSerializer(data=request.data)
if serializer.is_valid():
serializer.save(author=request.user)
^^^
return Response(serializer.data)
return Response(serializer.errors)
Upvotes: 1