Django - 在创建 many-to-one 模型时访问 Parent 模型字段

Django - Access Parent Model field when creating many-to-one model

假设您有一个 book/web comic/cartoon 的在线阅读模型:

class Book(models.Model):
    name = models.CharField(max_length=255, default="")
    image = models.ImageField(upload_to='uploads/ + name + /coverImage/')
    ...

然后每章一个模型:

class Chapter(models.Model):
    book= models.ForeignKey('Book', on_delete=models.CASCADE)
    name = models.CharField(max_length=255, default="")
    date_released = models.DateField(auto_now_add=True)
    date_changed = models.DateTimeField(auto_now=True)
    views = models.IntegerField(default=0)

那么你就有了 child 模型,它将包含每个页面的图像:

class ChapterImages(models.Model):
    chapter = models.ForeignKey('Chapter', on_delete=models.CASCADE)
    image = models.ImageField(upload_to='uploads/' + chapter.book.name + '/chapter')

ChapterImages字段image最后一个字段的代码有误。我想知道是否有可能在创建 child 时获取 parent 的名称?这样我就可以轻松地将它上传到与该书本身相同的文件夹中 sub-folder 该章节。

如您所见,我输入了 chapter.book.name,但没有用(对吗?)。有没有什么好的方法可以改变它,这样它就可以正常工作,而无需通过视图手动完成?

这确实是一个关于upload_to的问题。该属性还带有一个可调用对象,它传递了实例和文件名:

def upload_to_book_path(instance, filename):
    return 'uploads/' + instance.chapter.book.name + '/chapter/' + filename

class ChapterImages(models.Model):
    image = models.ImageField(upload_to=upload_to_book_path)