嵌套对象保存在DRF

时间:2016-10-15 18:09:25

标签: django django-rest-framework

型号:

class Owner(models.Model):
    name = models.CharField(max_length=255)

    def __unicode__(self):
        return self.name

class SomeThing(models.Model):
    own_id = models.IntegerField(unique=True)
    description = models.CharField(max_length=255, blank=True)
    owner = models.ForeignKey(Owner, blank=True, null=True)

def __unicode__(self):
    return self.description

串行器:

class OwnerNameField(serializers.RelatedField):
    def to_internal_value(self, data):
        pass

    def to_representation(self, value):
        return value.name

    def get_queryset(self):
        queryset = self.queryset
        if isinstance(queryset, (QuerySet, Manager)):
            queryset = queryset.all()
        lista = [Owner(name="------------")]
        lista.extend(queryset)
        return lista

class OwnerSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Owner
        fields = ('name', 'id')

class ThingSerializer(serializers.ModelSerializer):
    owner = OwnerNameField(queryset=Owner.objects.all())

    class Meta:
        model = SomeThing
        fields = ('own_id', 'description', 'owner')

基本上它按预期工作。但是当我向所有者类添加一些字段时,我希望在 ThingSerializer 的输出中看到所有这些字段(并且能够解析它们 - 字符串不适合这里) 。我可以将字段所有者更改为owner = OwnerSerializer(),这可以为我提供所需内容。但是,当我想添加 SomeThing 对象(在API浏览器中测试)时,我还需要添加新的所有者对象 - 我不想要它,我想使用现有的所有者对象。我怎样才能实现它?

1 个答案:

答案 0 :(得分:0)

最后我明白了。 This问题完全描述了我的问题,并提供了答案作为魅力!