Frage

Ich versuche, ein kombiniertes Bild aller Bilder auf ein Modell in django mit Inline-Editing und ein ForeignKey hinzugefügt zu machen. Ive erhielt diese Modelle (vereinfacht):

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)

Dann füge i Bild zum Modell mit AdminInline, so, wenn ich das Modell speichern i x Anzahl der Bilder zu speichern.

Aber wenn ich versuche, etwas mit Modell.images.all in der on_modell_saved Funktion tun kann ich nicht halten, die Objekte bekommen. Ive erhielt diese Funktion, die bei Modell.save ()

ausgeführt wird
def on_modell_saved(instance):
    for img in instance.images.all():
        print img

Diese druckt nur etwas das zweite Mal, dass ich das Modell und nicht das erste Mal speichern. So jemand wissen, wie eine Funktion aufrufen, nachdem alle Elemente, die Sie hinzufügen, mit AdminInline gespeichert wird?

War es hilfreich?

Lösung

Modell und Image sind zwei separate Modelle mit einem ForeignKey verbunden. Auch wenn sie beide gerettet zu werden scheinen zusammen , tun sie es nicht. Sie werden gespeichert nacheinander (zuerst die Modell oder zuerst die Images).

Jetzt logisch Images gespeichert nach Modell. Weil sie eine ForeignKey zeigt auf Modell und wenn Sie versuchen, sie zuerst zu retten, weil es keine Modell ist ja, würden sie auf nichts verweisen (die mit null=True möglich ist).

So durch die Zeit Modell.save() heißt Images gibt es nicht.

Lösung hängt davon ab, was Sie tun möchten, ? Ich nehme an, das Ziel ist hier nicht nur die Images ausdrucken.

Andere Tipps

Die Modell Instanz nicht gespeichert werden, wenn Sie ein neues Bild hinzufügen; nur die Image Instanz gespeichert wird.

Bewegen Sie den Funktionsaufruf in das Image Modell und Sie werden gut sein.

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)

ich dit es lösen irgendwie, aber es ist Farm nicht optimal, ich die modell_on_save Funktion auf Bild speicherte, das funktioniert, aber das Schlimme, dass, wenn es 5 Bilder auf dem Modell bezogen und gespeichert wird, wird es fünf Anrufe werden auf die Funktion, und das ist schlecht. Ich mag es nur geschehen nach dem letzten ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top