在Django2中使用另一个字段名动态命名图像文件
我正在尝试保存一个图像文件,该文件的名称已更改为相同格式的另一个字段的名称 经过一些实验后,当对象返回到模型进行保存时,通过在模型中使用处理函数,它工作得很好。我解构file对象并可以为其指定一个我想要的名称,但是,我无法解构Charfield对象并动态地将第一个字段名传递给图像文件在Django2中使用另一个字段名动态命名图像文件,django,django-models,Django,Django Models,我正在尝试保存一个图像文件,该文件的名称已更改为相同格式的另一个字段的名称 经过一些实验后,当对象返回到模型进行保存时,通过在模型中使用处理函数,它工作得很好。我解构file对象并可以为其指定一个我想要的名称,但是,我无法解构Charfield对象并动态地将第一个字段名传递给图像文件 from django.db import models import os #handler function to customise file name. def photo
from django.db import models
import os
#handler function to customise file name.
def photo_path(instance, filename):
basefilename, file_extension= os.path.splitext(filename)
return '{add}/{room}/{basename}{ext}'.format
(add='my_Add', room="should_Be_room_type", basename= basefilename, ext= file_extension)
模型是:
class Room(models.Model):
room_type = models.CharField( max_length=50) # i.e bedroom /living room etc
room_size = models.CharField( max_length=50)
img = models.ImageField( upload_to=photo_path, null=True, blank=True)
def __str__(self):
return self.room_type
在您的情况下,参数
instance
将是您的房间实例,您可以使用它来恢复Room\u type
和Room\u size
。由于在上传图像之前不会创建实例,因此,photo\u path
上唯一不可用的东西将是instance.id
,但您不需要它
那么,您的函数可以写成:
def photo_path(instance, filename):
basefilename, file_extension = os.path.splitext(filename)
return '{add}/{room}/{basename}{ext}'.format
(add='my_Add', room=instance.room_type, basename=basefilename, ext=file_extension)
谢谢,我最终在view.py中使用
my_room_type = request.POST['room_type']
initial_obj = form.save(commit=False)
initial_obj.save()
其想法是获取为“房间类型”输入的值,并将其打印在图像上。现在可以了,谢谢