簡體   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