Django 当前模型中的反向外键属性

Django 当前模型中的反向外键属性,django,django-models,foreign-keys,Django,Django Models,Foreign Keys,这里有一个问题,我读了很多帖子后都无法解决。我有两个模型,其中一个通过外键链接到另一个,如下所示: class Brewery(models.Model): name= models.CharField(max_length=100, null=False, blank=False) class Beer(models.Model): brewery = models.ForeignKey('Brewery', on_delete=models.SET_NULL, null=T

这里有一个问题,我读了很多帖子后都无法解决。我有两个模型,其中一个通过外键链接到另一个,如下所示:

class Brewery(models.Model):
    name= models.CharField(max_length=100, null=False, blank=False)

class Beer(models.Model):
    brewery = models.ForeignKey('Brewery', on_delete=models.SET_NULL, null=True, blank=False)
    name= models.CharField(max_length=100, null=False)
    image = models.ImageField(upload_to='photos/', blank=True)
我想把啤酒的图片储存在一个包含相关啤酒厂名称的文件夹中。例如,假设我有以下内容:

酿酒厂:id=1,name=“约翰·马丁”

啤酒:id=1,brewery=1,name=“Dominus”

然后我想上传到“约翰·马丁/多米努斯”。可能吗

提前谢谢大家,


1418是的,您可以将可调用的消息传递给:

class啤酒(models.Model):
def上传图像路径(自身,文件名):
如果self.brewery\u id为无:
返回…
返回f'{self.brewery.name}/{self.name}/{filename}'
brewery=models.ForeignKey(
“酿酒厂”,
on_delete=models.SET_NULL,
空=真,
空白=假
)
name=models.CharField(最大长度=100,null=False)
image=models.ImageField(upload\u to=upload\u image\u path,blank=True)

但是,当
self.brewery
None
时,您需要指定一个案例。在这种情况下,您不能使用
self.brewery.name
,因为
self.brewery
没有
brewery
,是的,您可以将可调用的消息传递给:

class啤酒(models.Model):
def上传图像路径(自身,文件名):
如果self.brewery\u id为无:
返回…
返回f'{self.brewery.name}/{self.name}/{filename}'
brewery=models.ForeignKey(
“酿酒厂”,
on_delete=models.SET_NULL,
空=真,
空白=假
)
name=models.CharField(最大长度=100,null=False)
image=models.ImageField(upload\u to=upload\u image\u path,blank=True)
但是,当
self.brewery
None
时,您需要指定一个案例。在这种情况下,您不能使用
self.brewery.name
,因为
self.brewery
没有
brewery

class Beer(models.Model):

    def upload_image_path(self, filename):
        if self.brewery_id is None:
            return …
        return f'{self.brewery.name}/{self.name}/{filename}'

    brewery = models.ForeignKey(
        'Brewery',
        on_delete=models.SET_NULL,
        null=True,
        blank=False
    )
    name= models.CharField(max_length=100, null=False)
    image = models.ImageField(upload_to=upload_image_path, blank=True)