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)
假设您有一个 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)