Бесконечный цикл в отношении многих ко многим - PullRequest
0 голосов
/ 20 октября 2011

Я хотел бы использовать отношение 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 должен иметь значение первичного ключа перед Можно использовать отношение многие ко многим.

Однако, если я переключу порядок следующим образом:

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

У меня есть pk, но мне нужно будет добавить еще один вызов к self.save(), чтобы песни были добавлены в экземпляр Person, и это вызовет бесконечный цикл.

Так, как я могу идти вперед и заставить эту работу? :)

Спасибо, Joel

1 Ответ

1 голос
/ 20 октября 2011

Нет необходимости сохранять после добавления элемента в отношение ManyToMany.Это не изменяет сам экземпляр - он просто добавляет строку в (явную или неявную) промежуточную таблицу.(То же самое относится и к обратным отношениям ForeignKey - вызов add изменяет добавляемый элемент, а не добавляемый элемент.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...