1

インライン編集と ForeignKey を使用して、django のモデルに追加されたすべての画像を組み合わせた画像を作成しようとしています。私はこれらのモデルを持っています(簡略化):

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 を使用して Model に Image を追加するので、Model を保存するときに x 個の画像を保存します。

しかし、on_model_saved 関数で Modell.images.all を使用して何かをしようとすると、オブジェクトを取得できません。Modell.save() で実行されるこの関数を取得しました

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

これは、初めてモデルを保存するのではなく、2回目に何かを印刷するだけです。AdminInline で追加するすべてのアイテムが保存された後に関数を呼び出す方法を知っている人はいますか?

4

3 に答える 3

3

ModellImageは で接続された 2 つの別個のモデルForeignKeyです。両方とも一緒に救われているように見えますが、そうではありません。それらは 1 つずつ保存されます (最初Modellまたは最初にImages)。

論理的に s は のImageに保存されるようになりました。それらは を指していて、最初にそれらを保存しようとすると、yes がないため、何も指していないためです (これは で可能です)。 ModellForeignKeyModellModellnull=True

そのため、 sModell.save()と呼ばれるまでにImageは存在しません。

解決策は、あなたが何をしたいかによって異なりますか?ここでの目的は、単にImages を出力することではないと思います。

于 2008-12-06T22:01:59.570 に答える
1

新しい画像を追加しても、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)
于 2008-12-06T20:56:43.460 に答える
0

どうにかして解決しましたが、最適な状態からのファームです。画像の保存時に modell_on_save 関数を実行しました。これは機能しますが、モデルに関連付けられて保存された 5 つの画像がある場合、関数への呼び出しが 5 回発生するという悪い点があります。 、そしてそれは悪いことです。私はそれが最後のものの後にだけ起こることを望みます...

于 2008-12-07T00:59:56.417 に答える