我们有Django Rest框架在工作,但是我是一个前端开发人员,决定为他的下一个开源项目做一点DRF。
我不希望复制粘贴太多代码,因为您可以看到我所有的序列化程序、模型等……on GitHub。
我已经问过工作中的开发人员了。有人说我应该重写to_representation
,这看起来不太对,因为我们是从头开始构建序列化模型。而另一位工作中的Django开发人员建议我研究一下custom relation fields。
从本质上讲,给定以下序列化程序,我将如何在查询集中包含连接表中的"type“(命名不佳)列:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'countries')
在伪代码中,我寻找类似下面的内容,所以当你获得一个用户时,你也会得到相关的countries
,它通过多对多关系工作得很好,以及来自连接表的“类型”:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'countries', 'pinned.type')
我希望得到如下JSON响应:
{
"username": "wildhoney",
"countries": [
{ "country_id": 4, "type": 1 },
{ "country_id": 5, "type": 2 },
{ "country_id": 6, "type": 3 }
]
}
目前,我只收到一个country_id
列表。
发布于 2017-07-31 18:04:01
您将需要使用如下嵌套关系:
class TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = ('order', 'title', 'duration')
class AlbumSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True, read_only=True)
class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')
来源:http://www.django-rest-framework.org/api-guide/relations/#nested-relationships
因此,对于您的情况,它将是:
class PinnedSerializer(ModelSerializer):
class Meta:
model = Pinned
fields = ('type', 'country_id')
class UserSerializer(ModelSerializer):
pins = PinnedSerializer(many=True, read_only=True)
class Meta:
model = User
fields = ('id', 'username', 'countries', 'pins')
通过实际工程测试的最新版本:
class PinnedSerializer(serializers.ModelSerializer):
country_id = serializers.ReadOnlyField(source='country.id')
class Meta:
model = Pinned
fields = ('type', 'country_id')
class UserSerializer(serializers.ModelSerializer):
pinned_set = PinnedSerializer(many=True, read_only=True)
class Meta:
model = User
fields = ('id', 'username', 'pinned_set')
输出:
{
"id": 3,
"username": "bobdole",
"pinned_set": [
{
"type": 1,
"country_id": 250
}
]
}
https://stackoverflow.com/questions/45422379
复制相似问题