繁体   English   中英

Django - 序列化具有依赖项的模型对象

[英]Django - serialize model objects with dependencies

在序列化 TestChild 模型对象的查询集时,我希望 json 包含依赖的 TestParent 对象。

这是我的代码:

from django.db import models


class TestParentManager(models.Manager):
    def get_by_natural_key(self, field1, field2):
        return self.get(field1=field1, field2=field2)


class TestParent(models.Model):
    field1 = models.CharField(max_length=20, blank=True, default='')
    field2 = models.CharField(max_length=20, blank=True, default='')
    field3 = models.CharField(max_length=20, blank=True, default='')

    objects = TestParentManager()

    def natural_key(self):
        return (self.field1, self.field2)

    class Meta:
        unique_together = [['field1', 'field2']]


class TestChildManager(models.Manager):
    def get_by_natural_key(self, field1, field2):
        return self.get(field1=field1, field2=field2)


class TestChild(models.Model):
    parent = models.ForeignKey(TestParent, on_delete=models.CASCADE)
    field1 = models.CharField(max_length=20, blank=True, default='')
    field2 = models.CharField(max_length=20, blank=True, default='')
    field3 = models.CharField(max_length=20, blank=True, default='')

    objects = TestChildManager()

    def natural_key(self):
        return (self.field1, self.field2)
    natural_key.dependencies = ['environ_tool.testparent']

    class Meta:
        unique_together = [['field1', 'field2']]

当我跑

serializers.serialize(
    'json',
    eModels.TestChild.objects.all(),
    use_natural_foreign_keys=True,
    use_natural_primary_keys=True,
)

生成的 json 是这样的(没有 TestParent 对象):

[{u'fields': {u'field1': u'f1',
              u'field2': u'f2',
              u'field3': u'f3',
              u'parent': [u'foo2', u'']},
  u'model': u'environ_tool.testchild'}]

但我也想在 json 中看到 TestChild 对象所依赖的 TestParent 对象,如下所示:

[{u'fields': {u'field1': u'foo2', u'field2': u'', u'field3': u''},
  u'model': u'environ_tool.testparent'},
 {u'fields': {u'field1': u'f1',
              u'field2': u'f2',
              u'field3': u'f3',
              u'parent': [u'foo2', u'']},
  u'model': u'environ_tool.testchild'}]

django 文档让我相信这应该在序列化中发生,但没有运气。 我正在使用 Django 1.11,这里是文档页面https://docs.djangoproject.com/en/1.11/topics/serialization/

谢谢!

您可以为孩子编写序列化程序类。 您将不得不使用 django-rest-framework ModelSerializer。

class ChildSerializer(serializers.ModelSerializer):
    class Meta:
        model = childmodel
        fields = '__all__'
        depth = 1

你可以这样称呼它

serializer = ChildSerializer([childinstance1, ], many=True)

然后你可以把它转换成json

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM