使用Django REST Framework序列化外键数组

时间:2014-11-11 00:11:40

标签: django django-rest-framework

我有一个带有自定义“ArrayField”的模型(对于Postgres数组字段),它将一组外键存储到另一个模型中。 Django没有强制执行这种关系,但我放在那里的是外键。

class Foo(model):
    bars  =  ArrayField(models.IntegerField())

class Bar(model):
    blah  = models.CharField()

因此'bars'字段的值类似于[3,64,7,34,...],其中数字是Bar的非强制外键。渲染Foos时,我想使用Django REST Framework渲染此字段中表示的相关对象:

{ "foo" : {  "bars" : [ {"blah":"asdf"},
                        {"blah":"asdf"}
                      ]
          }
}

我无法弄清楚应该如何在序列化器中表达:

class BarSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ('blah')

    blah     = serializersCharField()


class FooSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ('bars')

    # bars     = BarSerializer(many=True)
    bars      = SomeSpecialCustomField() #?

渲染时如何获得上述JSON?

1 个答案:

答案 0 :(得分:1)

尝试玩这个:

class SomeSpecialCustomField(serializers.Field):

    def to_native(self, value):
        queryset = Bar.objects.filter(pk__in=value)
        serializer = BarSerializer(queryset, many=True)
        return serializer.data

确保输入正确的验证,例如检查值是否为列表等。

相关问题