在Django REST框架序列化器中动态排除或包含一个字段

在Django REST框架序列化器中动态排除或包含一个字段

我在Django REST框架中有一个序列化程序,定义如下:

1
2
3
4
class QuestionSerializer(serializers.Serializer):
id = serializers.CharField()
question_text = QuestionTextSerializer()
topic = TopicSerializer()

现在我有两个使用上述序列化程序的API视图:

1
2
3
4
5
6
7
8
class QuestionWithTopicView(generics.RetrieveAPIView):
# I wish to include all three fields - id, question_text
# and topic in this API.
serializer_class = QuestionSerializer

class QuestionWithoutTopicView(generics.RetrieveAPIView):
# I want to exclude topic in this API.
serializer_class = ExamHistorySerializer

一个解决方案是写两个不同的串行器。但是,必须有一个更简单的解决方案来有条件地从给定的序列化程序中排除字段。

你试过这个技巧吗

1
2
3
4
5
6
7
8
9
10
11
12
class QuestionSerializer(serializers.Serializer):
def __init__(self, *args, **kwargs):
remove_fields = kwargs.pop('remove_fields', None)
super(QuestionSerializer, self).__init__(*args, **kwargs)

if remove_fields:
# for multiple fields in a list
for field_name in remove_fields:
self.fields.pop(field_name)

class QuestionWithoutTopicView(generics.RetrieveAPIView):
serializer_class = QuestionSerializer(remove_fields=['field_to_remove1' 'field_to_remove2'])

如果没有,值得尝试。

refs

在Django REST框架序列化器中动态排除或包含一个字段

本文标题:在Django REST框架序列化器中动态排除或包含一个字段

文章作者:shuke

发布时间:2020年04月23日 - 15:04

最后更新:2020年04月23日 - 15:04

原始链接:https://shuke163.github.io/2020/04/23/%E5%9C%A8Django-REST%E6%A1%86%E6%9E%B6%E5%BA%8F%E5%88%97%E5%8C%96%E5%99%A8%E4%B8%AD%E5%8A%A8%E6%80%81%E6%8E%92%E9%99%A4%E6%88%96%E5%8C%85%E5%90%AB%E4%B8%80%E4%B8%AA%E5%AD%97%E6%AE%B5/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------

本文标题:在Django REST框架序列化器中动态排除或包含一个字段

文章作者:shuke

发布时间:2020年04月23日 - 15:04

最后更新:2020年04月23日 - 15:04

原始链接:https://shuke163.github.io/2020/04/23/%E5%9C%A8Django-REST%E6%A1%86%E6%9E%B6%E5%BA%8F%E5%88%97%E5%8C%96%E5%99%A8%E4%B8%AD%E5%8A%A8%E6%80%81%E6%8E%92%E9%99%A4%E6%88%96%E5%8C%85%E5%90%AB%E4%B8%80%E4%B8%AA%E5%AD%97%E6%AE%B5/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%