我试图使加入到潜行与联编辑和一个ForeignKey django的所有图像的组合图像。 Ive得到这些模型(简化的):

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的潜行,所以当我保存潜行我保存的图像的x个。

但是当我尝试做一些Modell.images.all在on_modell_saved功能我不能得到的对象保持。 Ive得到其在Modell.save执行该功能()

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

此仅打印的东西第二时刻i保存潜行和不是第一次。因此,任何人知道如何调用一个函数,你与AdminInline将所有物品被保存后?

有帮助吗?

解决方案

Modell Image是具有ForeignKey连接的两个独立的模式。即使他们似乎都被保存的一起的,他们不知道。它们被保存由一个一个(第一的或Modell第一Images)。

现在逻辑Images保存的 Modell。因为他们有一个ForeignKey指向Modell,如果你尝试先救他们,因为没有Modell是的,他们会指向什么(这是可能的null=True)。

因此,通过将时间Modell.save()称为Images不存在。

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

其他提示

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)

我DIT解决它在某种程度上,但它是最佳的农场,我做了形象modell_on_save功能保存,这工作,但不好的一点是,如果有5倍相关并保存到潜行的图像,将有5个通话的功能,那就是坏的。我想这是只有最后一个后发生......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top