我有一个django后端:
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
models.py
def portada_inmueble_path(instance, file_name):
print('ID', instance.pk) // Here the id or pk is None
return '{}/{}/{}'.format(
instance.inmobiliaria.id,
instance.pk,
file_name)
class Inmueble(models.Model):
...
portada = models.ImageField(upload_to=portada_inmueble_path, blank=True,
null=True, max_length=99)
...
signals.py
@receiver(signals.pre_save, sender=Inmueble)
def inmueble_pre_save(sender, instance, **kwargs):
new_file = instance.portada
try:
old_file = Inmueble.objects.get(pk=instance.pk).portada
if not old_file == new_file:
if os.path.isfile(old_file.path):
os.remove(old_file.path)
except:
pass
我需要像这样命名文件路径:
/media/inmobiliaria_id/inmueble_id/portada.jpg
我的问题是路径中不存在inmueble(属性)的id,因为它尚未创建。如何获取ID并使用该名称创建文件夹?
由于
答案 0 :(得分:0)
如上所述,在保存ID之前,您无法拥有该ID,因为ID将由数据库生成,您无法控制它。
一些选项:
(快速,干净,不需要太多代码。在添加图像之前可能会出现一些问题(如服务器崩溃,这种情况很少见,但可能会发生。)
(它基本上像第一个选项,但反过来。需要更多代码,需要处理文件。仍然可能存在服务器崩溃等问题)
(在我看来,最好的选择,不需要太多的代码(只是检查生成的ID是否已经存在)。非常干净,一切都没有需要任何更新,你不会遇到问题,如服务器崩溃。