Pergunta

Eu estou tentando fazer uma imagem combinada de todas as imagens adicionadas a um modell no Django com linha edição e um ForeignKey. Eu tenho esses modelos (simplificado):

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)

Então eu adicionar imagem para o Modell com AdminInline, então quando eu salvar o Modell i save x número de imagens.

Mas quando eu tento fazer algo com Modell.images.all na função on_modell_saved eu não posso começar a preensão dos objetos. Eu tenho essa função que é executada no Modell.save ()

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

Isso só imprime algo a segunda vez que eu salvar o Modell e não pela primeira vez. Então conheço ninguém como chamar uma função após todos os itens que você está adicionando com AdminInline é salvo?

Foi útil?

Solução

Modell e Image dois modelos separados conectados com um ForeignKey. Mesmo que ambos parecem ser salvo juntos , eles não. Eles são salvos, um por um (primeiro o Modell ou primeiro as Images).

Agora, logicamente Images são salvos depois Modell. Porque eles têm um apontador ForeignKey para Modell e se você tentar salvá-los em primeiro lugar, porque não há nenhuma sim Modell, eles apontam para nada (o que é possível com null=True).

não existem Então, no momento Modell.save() é chamado Images.

Solution depende do que você quer fazer ? Suponho que o objetivo aqui não é apenas imprimir os Images.

Outras dicas

A instância Modell não está sendo salvo quando você adicionar uma nova imagem; apenas a instância Image está sendo salvo.

Mova seu chamada de função no modelo Image e você vai ser bom.

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)

I Dit resolvê-lo de alguma forma, mas é fazenda de ser ideal, eu fiz a função modell_on_save na imagem salvar, isso funciona, mas a única coisa ruim que, se há 5 imagens relacionadas e guardadas no Modell, haverá 5 chamadas para a função, e isso é ruim. Eu gostaria que acontecesse somente após o último ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top