質問

2つのモデルがあります。

class Production(models.Model):
    gallery = models.ManyToManyField(Gallery)

class Gallery(models.Model):
    name = models.CharField()

Productions管理者にはM2M関係がありますが、新しいプロダクションを作成すると、デフォルトのギャラリーが作成され、2つの間に関係が登録されている機能が必要です。

これまでのところ、プロダクションの保存を上書きすることで、デフォルトのギャラリーを作成できます。

def save(self, force_insert=False, force_update=False):
    if not ( Gallery.objects.filter(name__exact="foo").exists() ):
        g = Gallery(name="foo")
        g.save()
        self.gallery.add(g)

これにより、モデルインスタンスが作成されて保存されます(まだ存在していない場合)が、2つの関係を登録する方法がわかりませんか?

役に立ちましたか?

解決

あなたはあなたが持っているように、電話をかけることによって関係を登録します addProduction. 。問題は、あなたが保存していることです Gallery, 、しかしそうではありません Production だれの save あなたはオーバーライドしました。あなたは電話する必要があります super(...).save(...) あなたの終わりに save:

def save(self, force_insert=False, force_update=False):
    if not ( Gallery.objects.filter(name__exact="foo").exists() ):
        g = Gallery(name="foo")
        g.save()
        self.gallery.add(g)
    super(Production, self).save(force_insert=force_insert, force_update=force_update)

さらに、ここで2つのモデルを扱っているので、おそらくこれにはDjangoの信号を使用する必要があります。 節約後, 、これもあなたに与えます created 国旗:

def create_default_gallery(sender, instance, created, **kwargs):
    if created and not Gallery.objects.filter(name__exact="foo").exists():
        g = Gallery(name="foo")
        g.save()
        instance.gallery.add(g)
models.signals.post_save.connect(create_default_gallery, sender=Production)

これはまだあなたが望むと言うことをしませんが。本当にデフォルトを関連付けたい場合 Gallery すべての新しいで Production, 、デフォルトを作成していない場合でも、それをしたいと思うでしょう Gallery:

def create_default_gallery(sender, instance, created, **kwargs):
    if created:
        g = Gallery.objects.get_or_create(name__exact="foo")
        g.save()
        instance.gallery.add(g)
models.signals.post_save.connect(create_default_gallery, sender=Production)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top