【问题标题】:Serialize objects and parents in one-to-one relationship in django在 django 中以一对一的关系序列化对象和父对象
【发布时间】:2017-10-05 00:41:35
【问题描述】:

我有两个模型:域和专业,其中域是专业的外键:

class Domain(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name


class Speciality(models.Model):
    domain = models.ForeignKey(Domain, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

在我看来,我对专业进行了过滤,因此我将获得一个包含所有专业及其域的查询集,每个对象都是单独的。我想序列化以获得这样的东西:

{ object1 : { 'domain' : 'Computer science',
              'specialities' : { {'pk': '1', 'name':'Programming'},
                                 {'pk': '2', 'name':'Networking'} 
                               }
            },
  object2 : { 'domain' : 'Mathmatics',
              'specialities' : { {'pk': '3', 'name':'Algebra'},
                                 {'pk': '4', 'name':'Geometry'} 
                               }
            }
}

所以基本上,我想从子序列化到父序列,而不是我通常看到的:从父序列到子序列。 我看不到用 django ModelSerializer 做到这一点。有没有办法做到这一点,或者我应该手动做。

【问题讨论】:

标签: django


【解决方案1】:

这可以使用 ModelSerializers 来完成。

试试这样的,

class SpecialitySerializer(serializers.ModelSerializer):

    class Meta:
        model = Speciality
        fields = '__all__'


class DomainSerializer(serializers.ModelSerializer):
    specialities = SpecialitySerializer(source='specialities', many=True)
    class Meta:
        model = Domain
        fields = ('name', 'specialities',)

使用 DomainSerializer 进行查询。

您还必须为 Specialty 模型中的 ForeignKey 约束设置一个 related_name(即“specialities”)。

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2011-03-23
    • 2011-01-24
    相关资源
    最近更新 更多