【发布时间】:2020-05-12 12:43:54
【问题描述】:
序列化器.py
class ThreadSerializer(serializers.ModelSerializer):
author = UserSerializer(read_only=True)
last_post_user = UserSerializer(read_only=True)
class Meta:
model = Thread
fields = '__all__'
read_only_fields = ('locked', 'views', 'post_count', 'last_post_time')
class ChannelSerializer(serializers.ModelSerializer):
threads = ThreadSerializer(many=True, read_only=True)
class Meta:
model = Channel
fields = ['id', 'name', 'description', 'category', 'threads']
class CategorySerializer(serializers.ModelSerializer):
channels = ChannelSerializer(many=True, read_only=True)
class Meta:
model = Category
fields = ['id', 'name', 'channels']
您会注意到我在 CategorySerializer 中嵌套了 ChannelSerializer,当我访问使用 CategorySerializer 查询数据的端点时,我希望它会仅列出来自 ChannelSerializer 的数据,但是它也列出来自 ThreadSerializer 的数据,我认为这是预期的行为,因为 ThreadSerializer 嵌套在 em>ChannelSerializer。
当我嵌套序列化程序时,是否有一些优雅的方法可以排除字段?在这种情况下,我想在使用 CategorySerializer
查询数据时排除threads
我尝试了类似 question 的答案,但不幸的是,它似乎无法在我的情况下工作,它最终再次列出了线程,我认为还有更简单的方法可以做到这一点。
【问题讨论】:
-
从
Meta选项中删除不必要的字段不是很难吗? -
@ArakkalAbu 我可以这样做,但我有一个不同的端点,它依赖于 ChannelSerializer,我希望在其中包含线程字段。我猜想使用 Meta 选项排除该字段将全局排除该字段。
-
然后,使用多个序列化程序(我会这样做)
-
您可以创建另一个不包含线程字段的 ChannelSerializer 版本,并在 CategorySerializer 中引用它。
-
正在考虑使用单独的序列化程序,但它似乎有点多余,但我想当我需要字段过滤时我会坚持使用它。谢谢:)
标签: python django django-rest-framework