【问题标题】:django model serializationdjango模型序列化
【发布时间】:2011-08-26 19:50:31
【问题描述】:

我想序列化模型:

class Schedule(models.Model):
   Title = models.CharField(max_length=512)

class ScheduleEvent1(models.Model):
   ScheduleContent = models.ForeignKey(Schedule)
   Description = models.TextField()

class ScheduleEvent2(models.Model):
   ScheduleContent = models.ForeignKey(Schedule)
   AnotherField = models.TextField()
   ShortDescription = models.TextField()

serializers.serialize('json', Schedule.objects.all())那样做某事

结果喜欢

[
{
    "pk": 2,
    "model": "Schedule",
    "fields": {
        "Title": "Some Title",
        "ScheduleEvent1": [
            {
                "pk": 19,
                "model": "ScheduleEvent1",
                "fields": {
                    "Description": "Some Descr",
                }
            },
            {
                "pk": 20,
                "model": "ScheduleEvent1",
                "fields": {
                    "Description": "Some Descr2222",
                }
            }
        ],
        "ScheduleEvent2": [
            {
                "pk": 15,
                "model": "ScheduleEvent2",
                "fields": {
                    "AnotherField": "Some text",
                    "ShortDescription" : "Some text ...",
                }
            }
        ]
    }
}

]

一般。我有实体树。我需要从根目录序列化这棵树。

tnx 寻求帮助。

【问题讨论】:

  • 你有什么问题?这在 Django 中很容易做到。如果你使用活塞,那就更容易了。请发布您的代码和您遇到的错误。
  • 哦。我不知道我该怎么做:(你能显示示例代码吗?
  • 在我的示例中,我只有树的一部分。实际上树的深度可能大于2。
  • @Andrey:1)查询。 docs.djangoproject.com/en/1.3/topics/db/queries 2) 序列化。 docs.djangoproject.com/en/1.3/topics/serialization我不需要提供代码。它已经在 Django 的文档中。你有什么问题?请发布您的代码和您遇到的错误。
  • 我已阅读文档。我可以序列化这个例子。但我无法序列化更复杂的情况:1)两个以上不同的 ScheduleEvent 模型(ScheduleEvent3、ScheduleEvent4、ScheduleEvent5、ScheduleEvent6、...); 2)树的深度大于2。Schedule有Session = models.ForeignKey(Session),Session有OneMoreModel = models.ForeignKey(OneMoreModel)。我想写类似 serializers.serialize('json', OneMoreModel.objects.all()) 的东西并获得完整的 json。

标签: django json serialization models


【解决方案1】:

http://docs.djangoproject.com/en/1.3/topics/serialization/#dependencies-during-serialization

涵盖了这个的本质。结果文件不是精确所需要的,因为对象不会嵌套。然而,这是 Django 默认生成的,也是 Django 将用于反序列化的。

如果您使用Piston,您可以轻松定义一个将生成嵌套 JSON 的处理程序,但它不会精确地如图所示,因为 Piston 的 JSON 发射器并非精确地采用 Django 格式。

准确地了解所希望的结果导致扩展 Django 序列化程序以生成嵌套的 JSON 对象作为自然键。见http://code.djangoproject.com/browser/django/trunk/django/core/serializers/python.py。第 47-59 行

或者,您可以定义一个 natural_key 方法,该方法使用 Django 的 'django.core.serializers.json .Serializer` 来发出对象的 JSON 序列化,而不是其他一些自然键值。这在语义上有点奇怪,但它可能会做你想做的事。

【讨论】:

  • Tnx 寻求帮助。我会用活塞。
猜你喜欢
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 2017-10-20
  • 2011-04-30
  • 2019-03-19
  • 1970-01-01
  • 2013-01-26
  • 2013-11-27
相关资源
最近更新 更多