将具有相关对象的模型对象序列化为JSON [英] serialize model object with related objects to JSON

查看:91
本文介绍了将具有相关对象的模型对象序列化为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆