Obtenga acceso a objetos ForeignKey en Parent Save en Django

votos
1

Estoy tratando de hacer una imagen combinada de todas las imágenes agregadas a un modelo en django con edición en línea y una ForeignKey. Tengo estos modelos (simplificados):

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)

Luego agrego Image al Modell con AdminInline, así que cuando guardo el Modell guardo x número de imágenes.

Pero cuando trato de hacer algo con Modell.images.all en la función on_modell_saved no puedo agarrar los objetos. Tengo esta función que se ejecuta en Modell.save ()

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

Esto solo imprime algo la segunda vez que guardo el Modell y no la primera vez. Entonces, ¿alguien sabe cómo llamar a una función después de guardar todos los elementos que está agregando con AdminInline?

Publicado el 06/12/2008 a las 21:19
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
1

La Modellinstancia no se guarda cuando agrega una nueva imagen; solo la Imageinstancia se está guardando.

Mueva su llamada de función al Imagemodelo y estará bien.

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)
Respondida el 06/12/2008 a las 21:56
fuente por usuario

votos
3

Modelly Imageson dos modelos separados conectados con a ForeignKey. A pesar de que ambos parecen ser salvados juntos , no lo hacen. Se guardan uno por uno (primero el Modellprimero o primero el Images).

Ahora, lógicamente Image, se guardan después Modell . Debido a que tienen un ForeignKeyseñalador Modelly si intentas guardarlos primero, porque no hay Modellsí, no apuntan a nada (lo cual es posible con null=True).

Entonces, cuando Modell.save()se llama Images no existen.

La solución depende de lo que quieras hacer? Supongo que el objetivo aquí no es simplemente imprimir el Images.

Respondida el 06/12/2008 a las 23:01
fuente por usuario

votos
0

Lo soluciono de alguna manera, pero es farm from optimal, hice la función modell_on_save en Image save, esto funciona, pero lo malo es que si hay 5 imágenes relacionadas y guardadas en el modell, habrá 5 llamadas a la función y eso es malo Me gustaría que solo suceda después del último ...

Respondida el 07/12/2008 a las 01:59
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more