【问题标题】:Serialize django model with foreign key models用外键模型序列化 django 模型
【发布时间】:2011-04-30 05:41:16
【问题描述】:

如果我想包含外键模型字段,如何将 Django 模型序列化为 json 格式?

如果我有:

class Model1(models.Model):
    name=models.CharField()
    child=models.ForeignKey(Model2)

class Mode2(models.Model):
    field1=models.CharField()
    field2=models.IntegerField()

我想在 json 中包含所有内容...

【问题讨论】:

    标签: python django


    【解决方案1】:

    我有类似的问题,所以我拿了一些我以前做过的代码,并对其进行了改进。它实际上最终出现在一个完整的 python 序列化框架 SpitEat 中。您可以下载试用here。文档还不是很好,所以这里是你必须用来序列化你的东西的代码:

    >>> from spiteat.djangosrz import DjangoModelSrz #you should actually put spiteat in your path first
    >>> Model1Srz = DjangoModelSrz.factory(Model1)
    >>> srz_instance = Model1Srz(some_obj_you_want_to_serialize)
    >>> srz_instance.spit()
    ... {
    ...    'pk': <a_pk>,
    ...    'id': <an_id>,
    ...    'name': <a_name>,
    ...    'child': {
    ...        'pk': <another_pk>,
    ...        'id': <another_id>,
    ...        'field1': <a_value>,
    ...        'field2': <another_value>
    ...    }
    ... }
    

    所以,完整的、深度的序列化。您可以自定义内容(选择包含哪些字段等......但这还没有经过测试,也没有很好的记录)。 文档会在接下来的日子里变得更好,就像代码一样,所以你可以开始使用它而不必担心没有支持!

    当然,一旦您的对象序列化,只需使用 json 为:

    >>> import json
    >>> json_srz = json.dumps(srz_instance.spit())
    

    你得到了你想要的!

    【讨论】:

      【解决方案2】:

      有时我没有在 django 上工作,但这适合你吗?

      import simplejson as json
      
      data = Model1.objects.get(pk=some_id)
      
      to_dump =  {'pk': data.pk, 'name':data.name, 
                 'fields':{'field_1':data.child.field_1, 
                           'field_2':data.child.field_2 
                          }
                  }
      
      json_data = json.dumps(to_dump)
      

      【讨论】:

      • 但是我需要用过滤器来做......而且看起来我需要做同样的事情但是在循环中......我想必须有更简单的方法......
      猜你喜欢
      • 2020-02-08
      • 2021-05-04
      • 2013-01-17
      • 2011-08-26
      • 1970-01-01
      • 2013-01-26
      • 2018-07-02
      • 2021-06-17
      • 1970-01-01
      相关资源
      最近更新 更多