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

时间:2015-02-03 17:53:34

标签: django django-rest-framework

我正在使用djangorestframework == 3.0.3

所以我想显示一个模型上不存在的上传字段。我不想将上传的文件保存到模型中。我想分开处理它。我在下面的代码中得到此错误'XYZModelName'对象没有属性'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方法。

1 个答案:

答案 0 :(得分:1)

你需要在模型上定义一个返回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)