我正在使用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方法。
答案 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)