python - Django模型,如何添加用户而不是实例?
问题描述
我正在尝试返回 JSON 格式,但出现错误 User object is not JSON serializable
我进行了调试并发现了问题,但我坚持修复它。
现在,如果我打印我的对象,我会得到这样的格式
[
{
'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 - 生成新对象的函数
@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)
解决方案
由于您的函数返回一个字典,您可以使用:
NewPost.serialize()['poster']
或者可能:
NewPost.objects.get(id = id)['poster']
推荐阅读
- amazon-dynamodb - 如何从 DynamoDB 返回唯一值
- arm - J-Link 连接到 Cortex-A53 (Raspberry PI3b+)
- python - 如何同时初始化对象?
- validation - 如何在 Flutter 中检查和验证伊朗国家代码(Melli Code)?
- r - 在 R 中将消息、警告和错误捕获到 web api
- javascript - 如何在快速工作区中转换简单的反应组件
- php - 如果 id 不为 null,则返回,laravel elequent
- c++ - 强制向量的分配器指向特定位置
- kendo-ui - 网格中的 Kendo TreeView 显示“未定义”
- c++ - 如何将 int 作为右值参数传递给函数或构造函数?