我想使用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循环。
那么我怎样才能继续前进呢? :)
谢谢, 乔尔
答案 0 :(得分:1)
将项目添加到ManyToMany关系后无需保存。这不会修改实例本身 - 它只是向(显式或隐式)中间表添加一行。 (反向ForeignKey关系也是如此 - 调用add
会更改要添加的项目,而不是要添加的项目。)