我指的是这个youtube video,以了解如何使用Imagefield上传图像。他解释了如何在保存图像的同时使用instance.id
。我尝试过,但instance.id
返回None
。而对他来说,这一切都是完美的。以下是代码:
# models.py
import os
def get_image_path(instance, filename):
return os.path.join(str(instance.id), filename)
class AdProfile(models.Model):
name = models.CharField(max_length=100)
profile_image = models.ImageField(upload_to=get_image_path, blank=True, null=True)
无论何时保存文件,都会将其另存为None/filename
。
即使这个link也传达了同样的信息。我使用的是Django 10.5和MySQL数据库。
问题可能出在哪里?
3条答案
按热度按时间5vf7fwbs1#
Django admin在没有将模型保存到数据库的情况下调用了GET_IMAGE_PATH函数,因此id为None。我们可以使用保存方法覆盖Django模型,并确保保存了图像,并使用GET_IMAGE_PATH获取具有id的示例
2ekbmq322#
根据Raja Simon的回答,有一些方法可以处理模型中的所有
FileField
此外,我们可以使文件位置动态,即不仅基于self.id,而且还基于外键ID或其他任何东西。只需迭代字段并检查路径是否更改。
kzmpq1sx3#
您可以通过将清理后的数据从表单以**kwargs的形式传递给Django模型来创建模型示例。我就是这样做的,这比其他任何方法都简单得多
我根据所有者字段命名路径,该字段引用Django的用户模型
在您的视图中,POST方法添加这个(此代码来自我的项目,不适用于这个问题)