python - 如何添加新的序列化器字段以及所有模型字段?
问题描述
在这里,我有一个具有很多领域的模型。所以我想用它__all__
来返回所有的字段。但是现在我需要添加新字段image_url
,所以我自定义了一个这样的序列化程序,但是现在我需要像这样将所有模型字段放在Meta
类fields=['name','..', 'image_url']
中,以便返回image_url
.
有没有办法在image_url
不指定的情况下返回Meta.fields
?我的意思是我不想在中写所有模型字段Meta.fields
(因为字段太多)并且还想返回image_url
。
序列化程序.py
class MySerializer(ModelSerializer):
image_url = serializers.SerializerMethodField('get_image_url')
class Meta:
model = MyModel
fields = '__all__'
def get_image_url(self, obj):
return obj.image.url
解决方案
您可以尝试对 te 序列化程序进行子类化:
class MySerializer(ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
class MyChildSerializer(MySerializer):
image_url = serializers.SerializerMethodField()
class Meta:
fields = MySerializer.Meta.fields + ['image_url']
def get_image_url(self, obj):
return obj.image.url
从来没有尝试过这样的事情,但由于Meta.fields
是一个列表,您可以对其执行基本的 python 操作。
附言。如果您使用get_<field_name>
getter 模式,则无需在 SerializerMethodField 参数中指定它。
推荐阅读
- fortran - 从 MKL 11.3 库调用 DPOSV 例程期间出现分段错误
- android - 如何在 AWS Cognito android 中删除多个数据集?
- c++ - 为什么我得到分段错误
- android - 根据EditText视图Android自动缩放文本(字体大小)
- python - tensorflow 运行时无法启动 Tensorboard
- javascript - 在循环的 JavaScript 对象数组上添加删除按钮
- javascript - 显示所选文件的名称
- python - 订单号与索引号不同
- javascript - 如何在 Angular 中更改类变量
- android - cmd 给出 com.android.ide.common.process.ProcessException: 无法执行 aapt erro