2011-10-20 50 views
0

我想使用ManyToMany關係。我有以下型號:多對多關係中的無限循環

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

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

現在,在保存一個Person實例,我想建立一個多一對多的關係:

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) 

與上面的代碼的問題是,在形式提交的管理面板,收到錯誤

「人」的實例需要一個 多到許多可用於關係之前有一個主鍵值。

但是,如果我切換順序如下:

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

我有一個PK,但我將不得不再次調用爲了增加self.save()爲歌曲添加到個人實例,那會導致一個無限循環。

那麼我該如何繼續前進並完成這項工作? :)

感謝, 喬爾

回答

1

沒有必要將項目添加到一個多對多的關係後保存。這不會修改實例本身 - 它只是向(顯式或隱式)中間表添加一行。 (對於反向外鍵關係也是如此 - 調用add會更改要添加的項目,而不是要添加的項目。)