繁体   English   中英

Django model,如何添加用户不是实例?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM