我正在尝试使用默认的 Django 管理创建一个简单的照片库。我想为每个画廊保存一张样本照片,但我不想保留电影名。我不想保存文件名,而是保存模型的 ID (N.jpg
)。但是第一次我要保存的对象id不存在。我怎么知道模型中的下一个自动增量,或者在使用 super.save
上传之前以某种方式保存模型数据以及在 self.id
存在时上传文件之后?有没有很酷的解决方案?
像这样:
def upload_path_handler(instance, filename):
ext = filename extension
return "site_media/images/gallery/{id}.{ext}".format(id=instance.nextincrement, ext=ext)
class Gallery(models.Model):
name = models.TextField()
image = models.FileField(upload_to=upload_path_handler)
也许将文件名存储在不同的字段中。
最佳答案
我遇到了同样的问题。 Okm 的回答让我走上了正确的道路,但在我看来,只需覆盖模型的 save()
方法就可以获得相同的功能。
def save(self, *args, **kwargs):
if self.pk is None:
saved_image = self.image
self.image = None
super(Material, self).save(*args, **kwargs)
self.image = saved_image
super(Material, self).save(*args, **kwargs)
这肯定正确保存了信息。
关于python - 使用当前模型 ID 上传 Django 管理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9968532/