Django - 如何获取与另一个字段相关的 upload_to 目录
Django - how to get upload_to directory related to another field
我认为代码不言自明。我有 2 个模型 - 食物和类别,我想将食物图像保存到与食物类别同名的文件夹中。我在想我可以重写保存方法,但我不知道如何让它工作。有什么想法吗?
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = 'Categories'
class Food(models.Model):
name = models.CharField(max_length=255)
category = models.ForeignKey(Category, on_delete='CASCADE')
image = models.ImageField(upload_to='{}'.format(category.name))
def __str__(self):
return self.name
Django 文档说 upload_to 也可能是可调用的,例如函数。您可以查看更多详细信息here。
对于你的 use-case 它应该是这样的:
def food_path(instance, filename):
return '{0}/{1}'.format(instance.category.name, filename)
class Food(models.Model):
name = models.CharField(max_length=255)
category = models.ForeignKey(Category, on_delete='CASCADE')
image = models.ImageField(upload_to=food_path)
def __str__(self):
return self.name
我认为代码不言自明。我有 2 个模型 - 食物和类别,我想将食物图像保存到与食物类别同名的文件夹中。我在想我可以重写保存方法,但我不知道如何让它工作。有什么想法吗?
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = 'Categories'
class Food(models.Model):
name = models.CharField(max_length=255)
category = models.ForeignKey(Category, on_delete='CASCADE')
image = models.ImageField(upload_to='{}'.format(category.name))
def __str__(self):
return self.name
Django 文档说 upload_to 也可能是可调用的,例如函数。您可以查看更多详细信息here。
对于你的 use-case 它应该是这样的:
def food_path(instance, filename):
return '{0}/{1}'.format(instance.category.name, filename)
class Food(models.Model):
name = models.CharField(max_length=255)
category = models.ForeignKey(Category, on_delete='CASCADE')
image = models.ImageField(upload_to=food_path)
def __str__(self):
return self.name