[英]Django model, how to add the user not as Instance?
我正在尝试返回 JSON 格式,但出现错误用户 object is not JSON 可序列化
我进行了调试并发现了问题,但我坚持修复它。
现在如果我打印我的 object 我会得到这样的格式
[
{
'id': 1,
'poster': <User: stackoverflow>,
'description': 'test',
'date_added': 'Apr 20 2021, 02:52 AM',
'likes': 1
}
]
如何将“海报”作为仅包含用户名的字符串返回?
模型.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 - 生成新 object 的 function
@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)
由于您的 function 返回一个您可以使用的字典:
NewPost.serialize()['poster']
或者可能:
NewPost.objects.get(id = id)['poster']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.