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

时间:2016-10-08 18:50:43

标签: django model parent-child many-to-one

想象一下,你有一个用于在线阅读的书籍/网络漫画/卡通模型:

as

然后是每章的模型:

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无法正常工作(对吗?)。有没有一种很好的方法来改变它,以便它可以正常工作而无需通过视图手动完成?

1 个答案:

答案 0 :(得分:1)

这真是一个关于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)