Поле Django ManyToMany не принимает правильную модель

Я пытаюсь создать поле manytomany из модели, которая не является той моделью, список которой будет содержаться в поле manytomany. например

class Following(models.Model):
    following_id = models.AutoField(primary_key=True)
    following_user = models.ForeignKey(User, models.DO_NOTHING, related_name="following_user")
    following = models.ManyToManyField(User, related_name="following")

Мне все это кажется хорошим, но когда я пытаюсь войти в оболочку и сделать что-то вроде User.following.add(OtherUser), я получаю сообщение об ошибке, говорящее о том, что OtherUser должен быть экземпляром Following. Почему это? Разве я не указал, что ManyToManyField хранит экземпляры User, когда объявлял переменную following?

models.ManyToManyField(**User**, related_name="following")


person Ben    schedule 24.12.2020    source источник


Ответы (3)


1 - Создайте пользователя: user = User(); user.save()

2 - Создайте следующее: following = Following(); following.save()

3 - Добавьте пользователя к следующему: following.following.add(user)

person Amine Messaoudi    schedule 24.12.2020

Вы можете ссылаться на модель с другой моделью только один раз. Но вы используете User model два раза, один раз с following_user field, а другой с following field. Посмотрите под своей моделью.

class Following(models.Model):
    following_id = models.AutoField(primary_key=True)
    following_user = models.ForeignKey(*User*, models.DO_NOTHING, related_name="following_user")
    following = models.ManyToManyField(*User*, related_name="following")
person Sohaib    schedule 24.12.2020
comment
Я могу это сделать, потому что добавил аргумент ключевого слова related_name. Кажется, это не беда. Я могу без проблем вызвать как набор follow_user, так и следующий набор. Проблема в том, что я описал. Кроме того, мне нужно дважды использовать User, чтобы моя программа работала. - person Ben; 24.12.2020

попробуй это:

Другой побочный эффект использования commit=False проявляется, когда ваша модель имеет отношение «многие ко многим» с другой моделью. Если ваша модель имеет отношение «многие ко многим» и вы указываете commit=False при сохранении формы, Django не может сразу сохранить данные формы для отношения «многие ко многим». Это связано с тем, что невозможно сохранить данные «многие ко многим» для экземпляра, пока экземпляр не существует в базе данных.

Чтобы обойти эту проблему, каждый раз, когда вы сохраняете форму, используя commit=False, Django добавляет метод save_m2m() в ваш подкласс ModelForm. После того, как вы вручную сохранили экземпляр, созданный формой, вы можете вызвать save_m2m() для сохранения данных формы «многие ко многим». Например:

person Vit Amin    schedule 25.12.2020