假设您有一个模型,它是用于在线阅读的书籍/网络漫画/卡通:
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)