【问题标题】:Django serialize to JSONDjango 序列化为 JSON
【发布时间】:2010-09-29 16:42:57
【问题描述】:

我有一个带有实体类的 Django 模型(计划),即Activity 的父级,即Event 的父级。

class Entity(models.Model):
    <...>

class Activity(models.Model):
    <...>
    team_entity = models.ForeignKey(Entity)
    <...>   

class Event(models.Model):
    <...>
    activity = models.ForeignKey(Activity)
    <...>

如何序列化并获取子对象和大子对象作为 JSON 文件的一部分?

【问题讨论】:

    标签: python django json


    【解决方案1】:

    你可以用简单的两行代码做到这一点:

    from django.core import serializers
    data = serializers.serialize("json", SomeModel.objects.all())
    

    【讨论】:

      【解决方案2】:

      在我看来,发帖者提出的问题最终会得到如下结果:

      例如,从这些模型开始:

      class Entity(models.Model):
          name = models.CharField(...)
      
      class Activity(models.Model):
          name = models.CharField(...)
          team_entity = models.ForeignKey(Entity)
      
      class Event(models.Model):
          name = models.CharField(...)
          activity = models.ForeignKey(Activity)
      

      结果为 JSON:

      {
          "model": "Entity",
          "name":  "Dallas Cowboys",
          "activities": [
              {
                  "model": "Activity",
                  "name": "Practice"
              },
      
              {
                  "model": "Activity",
                  "name": "Game"
                  "events": [
                      {
                          "model": "Event",
                          "name": "vs Washington Redskins"
                      },
      
                      {
                          "model": "Event",
                          "name": "vs Green Bay Packers"
                      }
                  ]
              }
          ]
      }
      

      从而保持父子孙子(不是继承,而是一对多的关系遍历)。如果这不是最初的发帖人的意图,我很抱歉……但如果是这样,我也想知道这个问题的答案。

      【讨论】:

      • 如何——具体来说——实现这一点?
      • 是的,这就是我要找的。我需要一组实体,每个实体都没有很多活动,每个活动都没有很多事件。史蒂文
      • 这不是答案...这是对问题的澄清。
      【解决方案3】:

      我现在使用 django-piston。这样就行了。

      【讨论】:

      【解决方案4】:

      相信你可以在这里找到答案:http://code.djangoproject.com/ticket/4656

      这将在某个阶段成为 django 序列化程序的一部分。现在它应该能够用这个替换标准的 django 序列化程序并工作了。

      【讨论】:

        【解决方案5】:

        在进行序列化之前,检索对象时,为了保留关系,请使用 select_related() 来获取子、孙等

        http://docs.djangoproject.com/en/dev/ref/models/querysets/

        【讨论】:

          【解决方案6】:

          查看来自http://docs.djangoproject.com/en/dev/topics/serialization/?from=olddocs#inherited-models 的 Django 文档中的序列化继承模型和对象

          这应该可以解决您的问题。

          【讨论】:

          • 谢谢,我上周正在看那个。我可以获得一个实体列表、一个活动列表和一个事件列表。但我失去了亲子关系。任何线索我需要做什么?
          • umnik 下面是对的。我没有意识到您没有在模型查询集上使用 select_related()。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-23
          • 1970-01-01
          • 2013-12-05
          • 2011-11-30
          • 2012-01-18
          • 2011-07-05
          • 2015-02-07
          相关资源
          最近更新 更多