具有使用通用关系的动态 upload_to 函数的 Django 图像模型
Django Image model with dynamic upload_to function using generic relation
我正在创建一个图像模型,其他模型将通过通用关系使用它。例如,Newsposts 和 events 将有图像。下面是示例图片模型
class Image(models.Model):
description = models.CharField(max_length=500, null=True, blank=True)
image = models.ImageField(upload_to=get_storage_path)
content_type=models.ForeignKey(ContentType,on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
这会将图像仅存储在一个目录中。
但是问题是我不知道如何编写一个动态 upload_to
函数来将图像存储在相应的目录中,例如 images/news/
和 images/events
。
如果您需要在多个位置保存一个文件:结帐 Django Custom Storages。
如果您只需要根据相关对象动态设置 upload_to 文件夹:Here 是一个可能的重复线程,它回答了您的问题。
upload_to
处理程序采用 two arguments、instance
和 filename
。您可以检查 instance
以找出对象关联的内容类型:
def get_storage_path(instance, filename):
# This is just an example - you'll need to use the right name
# depending on the model class.
if instance.content_type.model == 'news':
# Generate filename here
else:
# Generate different file name here
我正在创建一个图像模型,其他模型将通过通用关系使用它。例如,Newsposts 和 events 将有图像。下面是示例图片模型
class Image(models.Model):
description = models.CharField(max_length=500, null=True, blank=True)
image = models.ImageField(upload_to=get_storage_path)
content_type=models.ForeignKey(ContentType,on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
这会将图像仅存储在一个目录中。
但是问题是我不知道如何编写一个动态 upload_to
函数来将图像存储在相应的目录中,例如 images/news/
和 images/events
。
如果您需要在多个位置保存一个文件:结帐 Django Custom Storages。
如果您只需要根据相关对象动态设置 upload_to 文件夹:Here 是一个可能的重复线程,它回答了您的问题。
upload_to
处理程序采用 two arguments、instance
和 filename
。您可以检查 instance
以找出对象关联的内容类型:
def get_storage_path(instance, filename):
# This is just an example - you'll need to use the right name
# depending on the model class.
if instance.content_type.model == 'news':
# Generate filename here
else:
# Generate different file name here