如何显示模型上不存在的 FileField - Django Rest Framework

How to display a FileField that doesn't exist on the model - Django Rest Framework

我正在使用 djangorestframework==3.0.3

所以我想显示模型上不存在的上传字段。我不想将上传的文件保存到模型中。我想单独处理。我用下面的代码得到这个错误 'XYZModelName' object has no attribute 'upload_file'.

class XYZSerializer(MyParentSerializer):

    upload_file = serializers.FileField(use_url=False)

    class Meta:
        model = models.XYZModelName
        fields = ('name', 'active', 'upload_file')

class XYZModelName(TrackedModel):
    name = models.CharField(max_length=50)
    active = models.BooleanField(default=False)

错误是因为我没有 upload_file 作为模型的属性。我不想 upload_file 在模型上。

如何在可浏览的 api 中显示该字段?

我还尝试创建自定义字段来覆盖 to_internal_value 和 to_representation 方法。

您需要在 returns URL 模型上定义一个函数(显然它需要与您的对象有某种关联)

def get_file_url(self):
    return settings.STORAGE_LOCATION + 'some/path/' + str(self.pk) + '.png'

然后您可以在序列化程序中使用它,例如:

upload_file = serializers.FileField(source='get_file_url')

要在 POST 期间保存文件,您需要重写序列化程序的 create 方法,例如:

def create(self, validated_data):
    file = validated_data['upload_file']
    # save file code here
    del validated_data['upload_file']
    return XYZ.objects.create(**validated_data)