500 Internal Server Error при попытке получить данные с помощью Django Rest Framework через Javascript
Я пытаюсь получить данные поста из бэкенда с помощью fetch. Однако я получаю ошибку сервера 500 при попытке получить данные. Я пробовал использовать .serialize() в бэкенде для передачи данных, а также пытался вернуть jsonResponse путем сериализации объекта запроса, что дало бы мне эту ошибку: Object of type User is not JSON serializable. Я пробовал, отправляя объект и без объекта. Есть предложения?
код models.py
class Post(models.Model):
user = models.ForeignKey(User,on_delete=models.PROTECT, default='',null=True)
message = models.TextField()
date = models.DateTimeField()
likes = models.ManyToManyField(User,blank=True,null=True,related_name="posts")
def serialize(self):
return {
"id": self.id,
"user": self.user,
"likes": [user for user in self.likes.all()],
"message": self.message,
"date": self.date.strftime("%b %d %Y")
}
код urls.py
path("post/<int:id>",views.post, name="post")
код views.py
@csrf_exempt
def post(request,id):
post = Post.objects.get(id=id)
if request.method == "GET":
return JsonResponse({"post":post.serialize()})
code script.js (post.getAttribute('name') - id поста)
posts.forEach(post => {
fetch(`post/${post.getAttribute('name')}`)
.then(response => response.json())
.then(data => {
console.log(data)
})
)}
Потому что вы пытаетесь User model instance преобразовать JSON. Просто измените "user": self.user to "user": self.user.email
или что вы хотите
def serialize(self):
return {
"id": self.id,
"user": self.user.email,
"likes": [user.id for user in self.likes.all()],
"message": self.message,
"date": self.date.strftime("%b %d %Y")
}