Django 深度序列化 - 遵循反向外键约束

Posted

技术标签:

【中文标题】Django 深度序列化 - 遵循反向外键约束【英文标题】:Django deep serialization - follow reverse foreign key constraints 【发布时间】:2012-10-15 22:11:45 【问题描述】:

我有两个具有外键关系的模型:

class Company(models.Model):
    field 1
    field 2

class Employee(models.Model):
    company = Model.ForeignKey('Company')
    field 3
    field 4

我想对一个公司实例进行 JSON 序列化,并包含与其有外键关系的所有员工。 IE,我想创建如下所示的 JSON,其中包括公司的所有字段和所有相关员工的所有字段。

[

    "pk": 2,
    "model": "app.company",
    "fields": 
        "field1": "value",
        "field2": "value",
        "employee": [
            
                "pk": 19,
                "model": "app.employee",
                "fields": 
                    "field3": "value",
                    "field4": "value",
                
            ,
            
                "pk": 25,
                "model": "app.employee",
                "fields": 
                    "field3": "value",
                    "field4": "value",
                
            
        ]
    

]

Django 序列化程序不序列化关系。这里的其他问题询问了如何深度序列化,但方向相反 - IE,序列化员工及其相关公司。这些问题的答案已经指出,wadofstuff django-full-serializer 插件允许您进行这种深度序列化。问题是 wadofstuff 插件仅单向遵循这些关系——它不会遵循反向外键约束。所以,我想在这里推出我自己的。关于如何实现这一点的任何建议?

【问题讨论】:

【参考方案1】:

所以,这是一种超级预算的方法,它适用于我的目的,但我觉得必须有更好的方法(包括在这里,以防其他人正在寻找如何做这)。它只对我有用,因为我一次只发送一个 Company 对象,因此它没有明确保留关系层次结构这一事实并不是什么大问题。

给定“公司”的公司实例:

companyJSON = serializers.serialize('json', [company, ])
employeeJSON = serializers.serialize('json', company.employee_set.all())
fullJSON = companyJSON[:-1] + ", " + employeeJSON[1:]

【讨论】:

以上是关于Django 深度序列化 - 遵循反向外键约束的主要内容,如果未能解决你的问题,请参考以下文章

Django反向过滤查询集外键示例不起作用

父模型具有多个外键时的Django外键反向访问[重复]

Django,从反向外键查询添加数据(外键加入过滤器)

Django 反向查找外键

Django级联删除反向外键

Django - 遵循外键关系(即 SQL 中的 JOIN)