Почему метод Django `add()` в моих моделях Django "многие ко многим" не принимает?

Вопрос / проблема:

Я создаю приложение Django с двумя моделями: User а также Secret, Пользователи могут делиться секретами, а другие пользователи могут "любить" их. Я настроил мой likes поле как ManyToManyField, так что пользователи, которым нравится Секрет, могут храниться там, а затем извлекаться и т. д. Однако, когда я пытаюсь запросить пользователя и секрет и использовать my_secret.likes.add(my_User) ничего не происходит Я не получаю сообщение об ошибке, и когда я печатаю свой секрет many-to-manylikes поле, после добавления, я вижу: secrets.User.None,

Почему мой add() метод запущен, но я не получаю никаких ошибок, и почему мой пользователь не добавляется в лайки моего Секрета?

Примечание. Я сохранил объекты User и Secret при первоначальном создании. За пределами этого приложения я смог использовать add() метод просто отлично, но в этих сценариях я создавал объекты в данный момент, а не извлекал уже существующие объекты.

Есть ли другой способ справиться add() при использовании данных, полученных из запроса? Это моя единственная другая аргументация прямо сейчас, и я точно следовал документации здесь: Django Много-ко-многим Документам

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

Мои модели:

class User(models.Model):
    """
    Creates instances of a `User`.

    Parameters:
    -`models.Model` - Django's `models.Model` method allows us to create new models.
    """

    first_name = models.CharField(max_length=50) # CharField is field type for characters
    last_name = models.CharField(max_length=50)
    email = models.CharField(max_length=50)
    password = models.CharField(max_length=22)
    created_at = models.DateTimeField(auto_now_add=True) # DateTimeField is field type for date and time
    updated_at = models.DateTimeField(auto_now=True) # note the `auto_now=True` parameter
    objects = UserManager() # Attaches `UserManager` methods to our `User.objects` object.

class Secret(models.Model):
    """
    Creates instances of a `Secret`.

    Parameters:
    -`models.Model` - Django's `models.Model` method allows us to create new models.
    """

    description = models.CharField(max_length=100) # CharField is field type for characters
    user = models.ForeignKey(User, related_name="secrets") # One-to-Many Relationship
    likes = models.ManyToManyField(User) # Many to Many Relationship
    created_at = models.DateTimeField(auto_now_add=True) # DateTimeField is field type for date and time
    updated_at = models.DateTimeField(auto_now=True) # note the `auto_now=True` parameter
    objects = SecretManager() # Attaches `SecretManager` methods to our `Secret.objects` object.

Пример проблемы:

Модель мигрирует нормально, кажется, что все в правильном синтаксисе. Тем не менее, когда я пытаюсь получить User и Secretи добавить User к Secret.likes, add() Метод не дает ошибок, запускается, но объекты не сохраняются.

Вот пример:

tim = User.objects.get(email="tim@tim.com") # Gets a user object
my_secret = Secret.objects.get(id=2) # Gets a secret object
# This is where nothing seems to happen / take:
my_secret.likes.add(tim) # add() method per Django many-to-many docs
print my_secret.likes # returns: `secrets.User.None` -- why?

Почему при печати my_secret.likes выше ничего не напечатано?

Особенно когда:tim.secret_set.all() показывает секрет, содержащий id=2 как в приведенном выше примере.... так User записывает отношения с Secret, но Secret не записывает какие-либо отношения с User, Что я делаю неправильно?

1 ответ

Решение

Вам нужно позвонить all Метод поля "многие ко многим" для просмотра всех связанных объектов:

print my_secret.likes.all()
#                     ^^^^^
Другие вопросы по тегам