将具有相关对象的模型对象序列化为JSON [英] serialize model object with related objects to JSON
问题描述
我正在使用人
模型来存储人的详细信息。
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
从django.core导入序列化器
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:道格拉斯,
last_name:亚当斯,
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]]
}
}
我查看了官方文档,但没有得到任何帮助。 链接
似乎您想使用反向的 ForeignKey
关系来序列化 Person
。 Django的序列化器不支持该功能。例如,您必须使用Django REST Framework,例如 @DanielRoseman 的注释中指出的。。 p>
但如果可以妥协,以下解决方案将起作用。
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)
类Person(models.Model):
个对象= PersonManager()
#其他字段
...
现在,您不必序列化 Person
,而必须序列化 PersonLogs
,它将输出以下内容:
{
pk:1,
model: models.PersonLogs,
fields:{
time: 2015-06-09 15:42:58.861540,
person:[ Douglas, Adams, 1952-03-11]
}
}
I am having a Person
model to store person details.
class Person(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
birthdate = models.DateField()
also i am having model PersonLogs
to store person's activity logs.
class PersonLogs(models.Model):
person = models.ForeignKey(Person)
time = models.DateTimeField(auto_now_add=True)
I am using Django Serializer to return Person objects into JSON format as response.
from django.core import serializers
data = serializers.serialize("json", Person.objects.all())
Output :
{
"model": "store.person",
"fields": {
"first_name": "Douglas",
"last_name": "Adams",
"birth_date": "1952-03-11",
}
}
Now i want to return PersonLogs
into response JSON.
Expected Output :
{
"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]]
}
}
I looked into official documentation but i did not get any help. link
It seems that you want to serialize Person
with reverse ForeignKey
relationship. Django's serializer doesn't support that. You'll have to use Django REST Framework, for e.g., as pointed out in comments by @DanielRoseman.
But if you can compromise, the following solution will work.
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
...
Now, instead of serializing Person
, you'll have to serialize PersonLogs
, which will output this:
{
"pk": 1,
"model": "models.PersonLogs",
"fields": {
"time": "2015-06-09 15:42:58.861540",
"person": ["Douglas", "Adams", "1952-03-11"]
}
}
这篇关于将具有相关对象的模型对象序列化为JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!