可以访问ForeignKey的父母在对象保存在Django
-
19-08-2019 - |
题
我试图使加入到潜行与联编辑和一个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
第一Image
s)。
现在逻辑Image
s保存的后强> Modell
。因为他们有一个ForeignKey
指向Modell
,如果你尝试先救他们,因为没有Modell
是的,他们会指向什么(这是可能的null=True
)。
因此,通过将时间Modell.save()
称为Image
s不存在。
解决方案取决于你想要做什么?我想这里的目的并不仅仅打印出Image
s。
其他提示
在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个通话的功能,那就是坏的。我想这是只有最后一个后发生......
不隶属于 StackOverflow