I'm trying to return a JSON format but I get an error User object is not JSON serializable
I did debug and found the problem, but I'm stuck with fixing it.
Right now if I print my object i get format like this
[
{
'id': 1,
'poster': <User: stackoverflow>,
'description': 'test',
'date_added': 'Apr 20 2021, 02:52 AM',
'likes': 1
}
]
How can I return the "poster" as a string with the username only?
models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
pass
class NewPost(models.Model):
poster = models.ForeignKey("User", on_delete=models.PROTECT, related_name="posts_posted")
description = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
likes = models.IntegerField(default=1)
def serialize(self):
return {
"id": self.id,
"poster": self.poster,
"description": self.description,
"date_added": self.date_added.strftime("%b %d %Y, %I:%M %p"),
"likes": self.likes
}
views.py - the function that makes a new object
@csrf_exempt
def compose_post(request):
# Composing a new post must be via POST
if request.method != "POST":
return JsonResponse({"error": "POST request required."}, status=400)
# Check post words
data = json.loads(request.body)
words = [word.strip() for word in data.get("description").split(" ")]
if words == [""]:
return JsonResponse({
"error": "At least one word required."
}, status=400)
# Convert post to NewPost object
description = data.get("description", "")
new_post = NewPost(poster=request.user, description=description)
new_post.save()
return JsonResponse({"message": "Post saved successfully."}, status=201)