Domanda

Sto cercando di creare un'immagine combinata di tutte le immagini aggiunte a un modello in django con editing inline e ForeignKey. Ho questi modelli (semplificati):

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)

Quindi aggiungo Immagine al modello con AdminInline, quindi quando salvo il modello salvo x numero di immagini.

Ma quando provo a fare qualcosa con Modell.images.all nella funzione on_modell_saved non riesco a trovare gli oggetti. Ho questa funzione che viene eseguita su Modell.save ()

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

Questo stampa qualcosa solo la seconda volta che salvo il modello e non la prima volta. Quindi qualcuno sa come chiamare una funzione dopo aver salvato tutti gli elementi che aggiungi con AdminInline?

È stato utile?

Soluzione

Modell e Image sono due modelli separati collegati con un ForeignKey . Anche se entrambi sembrano essere salvati insieme , non lo fanno. Vengono salvati uno per uno (prima il Modell o prima il Image )

Ora logicamente Immagine viene salvata dopo Modell . Poiché hanno un ForeignKey che punta a Modell e se provi prima a salvarli, perché non c'è Modell sì, non indicherebbero nulla ( che è possibile con null = True ).

Quindi, quando Modell.save () viene chiamato Image non esistono.

Solution dipende da cosa vuoi fare ? Suppongo che l'obiettivo qui non sia solo quello di stampare Image .

Altri suggerimenti

L'istanza Modell non viene salvata quando aggiungi una nuova immagine; viene salvata solo l'istanza Image .

Sposta la tua chiamata di funzione nel modello Image e sarai bravo.

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)

L'ho risolto in qualche modo, ma è farm dall'ottimale, ho fatto la funzione modell_on_save sul salvataggio delle immagini, questo funziona, ma la cosa brutta che se ci sono 5 immagini correlate e salvate nel modello, ci saranno 5 chiamate alla funzione, e questo è male. Vorrei che succedesse solo dopo l'ultimo ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top