Django -在创建多对一模型时访问父模型字段



假设您有一个模型,它是用于在线阅读的书籍/网络漫画/卡通:

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)
然后是子模型,它将包含每个页面的图像:
class ChapterImages(models.Model):
    chapter = models.ForeignKey('Chapter', on_delete=models.CASCADE)
    image = models.ImageField(upload_to='uploads/' + chapter.book.name + '/chapter')

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

正如你所看到的,我输入的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)

最新更新