Почему метод Django `add()` в моих моделях Django "многие ко многим" не принимает?
Вопрос / проблема:
Я создаю приложение Django с двумя моделями: User
а также Secret
, Пользователи могут делиться секретами, а другие пользователи могут "любить" их. Я настроил мой likes
поле как ManyToManyField
, так что пользователи, которым нравится Секрет, могут храниться там, а затем извлекаться и т. д. Однако, когда я пытаюсь запросить пользователя и секрет и использовать my_secret.likes.add(my_User)
ничего не происходит Я не получаю сообщение об ошибке, и когда я печатаю свой секрет many-to-many
likes
поле, после добавления, я вижу: 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()
# ^^^^^