Как исправить ошибку "ValueError:Экземпляр не сохранен. «Используйте bulk = False или сначала сохраните объект». - PullRequest
2 голосов
/ 01 июня 2019

Я хотел создать систему подписчиков, и я получил «ValueError: экземпляр не сохранен». Используйте bulk = False или сначала сохраните объект. ". Пожалуйста, как решить эту проблему, извините за плохое написание !!

#my models.py

from django.db import models
from django.contrib.auth import get_user_model

User = get_user_model()


class Follower(models.Model):
    follower = models.ForeignKey(User, related_name='following', on_delete=None)
    following = models.ForeignKey(User, related_name='followers', on_delete=None)

    class Meta:
        unique_together = ('follower', 'following')


    def __unicode__(self):
        return u'%s follows %s' % (self.follower, self.following)

#in the interpreter
>>> from followers.models import *

>>> john = User.objects.create_user('john', 'lennon@thebeatles.com', 'password')
>>> paul = User.objects.create_user('paul', 'mccartney@thebeatles.com', 'password')
>>> george = User.objects.create_user('george', 'harrison@thebeatles.com', 'password')
>>> ringo = User.objects.create_user('ringo', 'starr@thebeatles.com', 'password')

#the mistake comes from here
>>> john.following.add(Follower(following=paul))

и я получаю

в добавьте «объект первым». % obj ValueError: экземпляр не сохранен. Использовать bulk = False или сначала сохранить объект.

1 Ответ

0 голосов
/ 01 июня 2019

Вы должны создать объект Follower, например:

Follower.objects.create(<b>follower=john, following=paul</b>)

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

Вы также можете сделать Follower объектов в натуральном выражении, таких как:

Follower.objects.<b>bulk_create</b>([
    Follower(follower=john, following=paul),
    Follower(follower=john, following=ringo),
    Follower(follower=ringo, following=paul),
    Follower(follower=george, following=ringo)
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...