1

我正在尝试使用内联编辑和 ForeignKey 制作添加到 django 中的模型的所有图像的组合图像。我有这些模型(简化):

class Modell(models.Model):
    title = models.CharField('beskrivelse', max_length=200)
    slug = models.SlugField()
    is_public = models.BooleanField('publisert', default=True)

    def __unicode__(self):
        return self.title

    def save(self, **kwargs):
        super(Modell, self).save(**kwargs)

        on_modell_saved(self)   

class Image(models.Model):
    modell = models.ForeignKey(Modell, related_name="images")
    image = ThumbnailImageField('bilde', upload_to=get_upload_path_image)

    class Meta:
        verbose_name = 'bilde'
        verbose_name_plural = 'bilder'

    def __unicode__(self):
        return str(self.image)

然后我使用 AdminInline 将图像添加到 Modell,所以当我保存 Modell 时,我会保存 x 个图像。

但是当我尝试在 on_modell_saved 函数中使用 Modell.images.all 做某事时,我无法掌握这些对象。我得到了在 Modell.save() 执行的这个函数

def on_modell_saved(instance):
    for img in instance.images.all():
        print img

这只会在我第二次而不是第一次保存 Modell 时打印一些东西。所以有人知道在您使用 AdminInline 添加的所有项目保存后如何调用函数吗?

4

3 回答 3

3

Modell并且Image是两个单独的模型,用ForeignKey. 尽管他们似乎都得救,但他们没有。它们被一个一个地保存(首先是 theModell或首先是Images)。

现在逻辑上Images 保存在 之后 Modell。因为它们有一个ForeignKey指向Modell,如果您尝试先保存它们,因为没有Modell是,它们将指向任何内容(这可以使用null=True)。

所以到时候Modell.save()被称为Images 是不存在的。

解决方案取决于你想做什么?我想这里的目的不仅仅是打印出Images。

于 2008-12-06T22:01:59.570 回答
1

Modell添加新图像时未保存实例;只有Image实例被保存。

将你的函数调用移动到Image模型中,你会很好的。

def on_image_saved(instance):
    for img in Image.objects.filter(modell=instance.modell)
        print img

class Image(models.Model):
    modell = models.ForeignKey(Modell, related_name="images")
    image = ThumbnailImageField('bilde', upload_to=get_upload_path_image)

    class Meta:
        verbose_name = 'bilde'
        verbose_name_plural = 'bilder'

    def __unicode__(self):
        return str(self.image)

    def save(self, **kwargs):
        super(Image, self).save(**kwargs)

        on_image_saved(self)
于 2008-12-06T20:56:43.460 回答
0

我以某种方式解决了它,但它不是最优的,我在图像保存上做了 modell_on_save 函数,这很有效,但是如果有 5 个相关图像并保存到模型中,就会有 5 次调用该函数,这很糟糕。我希望它只发生在最后一个之后......

于 2008-12-07T00:59:56.417 回答