2011-10-20 11 views
0

ManyToManyリレーションを使用したいと思います。多対多リレーションの無限ループ

class Person(models.Model): 
    def save(self, *args, **kwargs): 
     song_instance, created = models.Songs.objects.get_or_create(name = some_name) 
     self.songs.add(song_instance) 
     super(Person, self).save(*args, **kwargs) 

上記のコードに問題が時のことを次のとおりです。Personインスタンスを保存すると、私は多対多の関係構築したいと思い、今

class Person(models.Model): 
    name = odels.CharField(max_length=200) 
    songs = models.ManyToManyField(Songs) 

class Songs(models.Model): 
    name = odels.CharField(max_length=200) 

:私は、次のモデルを持っていますフォーム私はエラー

を取得し、管理パネルに提出する「人」のインスタンスが 多対多の関係を使用することができます前に、主キーの値を持っている必要があります。私は順序を切り替えた場合

しかし、次のように:

super(Person, self).save(*args, **kwargs) 
self.songs.add(song_instance) 

私はPKを持っていますが、私は曲を順番にself.save()に別の呼び出しを追加する必要がありますが人に追加しますインスタンス、それはinfinteループを引き起こします。

どうすればこの作業を進めることができますか? :)

おかげで、 ジョエル

答えて

1

多対多の関係に項目を追加した後に保存する必要はありません。これはインスタンス自体を変更するものではなく、(明示的または暗黙的な)中間テーブルに行を追加するだけです。 (逆のForeignKey関係についても同様です。つまり、addを呼び出すと、追加するアイテムではなく、追加するアイテムが変更されます)

関連する問題