多对多关系中的无限循环

时间:2011-10-20 17:59:23

标签: django

我想使用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)

上述代码的问题是,在管理面板中提交表单时,我收到错误

  

'Person'实例需要在a之前有一个主键值   可以使用多对多关系。

但是,如果我按如下方式切换订单:

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

我确实有一个pk,但我必须再添加一个self.save()来调用,以便将歌曲添加到Person实例中,这将导致一个infinte循环。

那么我怎样才能继续前进呢? :)

谢谢, 乔尔

1 个答案:

答案 0 :(得分:1)

将项目添加到ManyToMany关系后无需保存。这不会修改实例本身 - 它只是向(显式或隐式)中间表添加一行。 (反向ForeignKey关系也是如此 - 调用add会更改要添加的项目,而不是要添加的项目。)