gpt4 book ai didi

django - 如何在查询集中包含连接表中的字段?

转载 作者:行者123 更新时间:2023-12-04 03:10:54 25 4
gpt4 key购买 nike

我们有 Django Rest Framework 在工作,但是我是一名前端开发人员,我决定为他的下一个开源项目做一点 DRF。

我不想复制粘贴很多代码,因为您可以看到我所有的序列化程序、模型等... on GitHub .

我问过工作中的开发人员。有人说我应该覆盖 to_representation 这似乎不对,因为我们正在从头开始构建序列化模型。而工作中的其他 Django 开发人员建议我查看 custom relation fields .

基本上给定以下序列化程序,我将如何在我的查询集中包含我的连接表中的“类型”(错误命名)列:

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列表。

最佳答案

您将要使用这样的嵌套关系:

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
}
]
}

关于django - 如何在查询集中包含连接表中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45422379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com