DRF添加非模型字段只是为了更新或创建模型实例

2024-09-30 01:29:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在和DRF有这个问题

我收到了模型未使用的额外字段。但这些值将定义模型中的字段

{
"file_name": "test",
"file_type": "jpg",
"file": basex64 file,
"url_img": null
}

我买了这个模型

class imageModel(models.Model):
   id = models.AutoField(primary_key=True)
   url_img = models.textField(null=False)

我所需要的就是解析文件名和文件类型来上传img,创建一个url\u img并上传到云上。有没有办法通过DRF做到这一点


Tags: name模型testurlimg定义modelstype
2条回答

DRF实现这一点的方法是,在serializer类中显式定义您的额外字段

class ImageModelSerializer(serializers.ModelSerializer):
    file_name = serializers.CharField(write_only=True)
    file_type = serializers.CharField(write_only=True)
    file = serializers.CharField(write_only=True)

    class Meta:
        model = ImageModel
        fields = "__all__"

在这里,我使用了^{} (DRF Doc),因为所有这些数据都是字符串(如果不是,则相应地选择序列化程序字段)

另外,设置^{} (DRF Doc)将有助于我们从响应中省略这些字段

正如穆罕默德所回答的,您为每个字段添加了一些序列化程序.MethodField()。还可以在元类中添加下一个方法

def to_internal_value(self, data):
        internal_value = super(ImageSerializer, self).to_internal_value(data)
        file_name = data.get("file_name")
        file = data.get("file")
        file_type= data.get("file_type")
        internal_value.update({
            "file_name": file_name,
            "file": file,
            "content_type": content_type
        })
        return internal_value

并在创建/更新方法上检索这些字段

相关问题 更多 >

    热门问题