在我的Django应用程序中,我有两个模型:Product
和Image
。
一个产品可以有多个图像,而一个图像只能属于一个产品。
我希望能够创建一个子文件夹的产品本身的名称时,一个产品的图像上传的图像。因此,在Image
模型中,我需要访问product
的标题。
下面是我的代码:
class Product(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(unique=True, blank=True, allow_unicode=True)
class Image(models.Model):
name = models.CharField(max_length=255, null=True, blank=True)
product = models.ForeignKey(Product, on_delete=models.CASCADE,
related_name='images')
image = models.ImageField(upload_to=f'product_images/{product.title}/')
在Image
模型中,我有一个image
字段,类型为ImageField
,我想在其中获取product
的标题。
我得到以下错误:
“ForeignKey”对象没有属性“title”
如何在Image
型号中访问product
的标题?
1条答案
按热度按时间zmeyuzjn1#
问题是因为这一行:
在定义模型时进行评估,在这种情况下,'product.title'还没有意义:只有当类的示例与关联的产品一起创建时才有意义。
要解决这个问题,请使用一个类似
get_upload_to
的辅助函数,并将其作为参数传递给upload_to
,如下所示:这个方法之所以有效,是因为当Django调用
get_upload_to
方法时,它会自动将示例和文件名变量传递给它(请参阅官方文档:)https://docs.djangoproject.com/en/4.2/ref/models/fields/#django.db.models.FileField.upload_to参阅