gpt4 book ai didi

django - 将具有相关对象的模型对象序列化为 JSON

转载 作者:行者123 更新时间:2023-12-04 15:21:10 25 4
gpt4 key购买 nike

我有一个 Person用于存储人员详细信息的模型。

class Person(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
birthdate = models.DateField()

我也有型号 PersonLogs存储人的事件日志。
class PersonLogs(models.Model):
person = models.ForeignKey(Person)
time = models.DateTimeField(auto_now_add=True)

我正在使用 Django Serializer 将 Person 对象返回为 JSON 格式作为响应。
from django.core import serializers
data = serializers.serialize("json", Person.objects.all())

输出 :
{
"model": "store.person",
"fields": {
"first_name": "Douglas",
"last_name": "Adams",
"birth_date": "1952-03-11",
}
}

现在我想返回 PersonLogs进入响应 JSON。

预期输出:
{
"model": "store.person",
"fields": {
"first_name": "Douglas",
"last_name": "Adams",
"birth_date": "1952-03-11",
"personlogs": [['2015-06-09 15:42:58.861540'], ['2014-06-09 15:42:58.861540'], [2013-06-09 15:42:58.861540]]
}
}

我查看了官方文档,但没有得到任何帮助。 link

最佳答案

好像要序列化Person与反向 ForeignKey关系。 Django 的序列化程序不支持。您必须使用 Django REST 框架,例如,正如 @DanielRoseman 在评论中指出的那样.

但是,如果您可以妥协,以下解决方案将起作用。

class PersonManager(models.Manager):
def get_by_natural_key(self, first_name, last_name, birthdate):
return self.get(first_name=first_name, last_name=last_name, birthdate=birthdate)

class Person(models.Model):
objects = PersonManager()

# other fields
...

现在,而不是序列化 Person ,你必须序列化 PersonLogs ,这将输出:
{
"pk": 1,
"model": "models.PersonLogs",
"fields": {
"time": "2015-06-09 15:42:58.861540",
"person": ["Douglas", "Adams", "1952-03-11"]
}
}

关于django - 将具有相关对象的模型对象序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30729207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com