Вопрос/проблема:
Я создаю приложение Django с двумя моделями: User
и Secret
. Секреты могут создаваться пользователями, и другие пользователи могут их «лайкать». Я настроил свое поле likes
как ManyToManyField
, чтобы пользователи, которым нравится секрет, могли храниться там, а затем извлекаться и т. д. Однако, когда я пытаюсь запросить пользователя и секрет и использовать my_secret.likes.add(my_User)
ничего не происходит< /эм>. Я не получаю сообщение об ошибке, и когда я печатаю поле many-to-many
likes
моего секрета, после добавления я вижу: secrets.User.None
.
Почему мой метод add()
работает, но я не получаю никаких ошибок, и почему мой пользователь не добавляется должным образом в лайки моего секрета?
Примечание. Я сохранил объекты User и Secret при первоначальном создании. Вне этого приложения я мог прекрасно использовать метод add()
, но в этих сценариях я создавал объекты в данный момент, а не извлекал уже существующие объекты.
Есть ли другой способ обработки add()
при использовании данных, полученных из запроса? Это моя единственная другая линия рассуждений прямо сейчас, и я точно следовал документации здесь: Документы Django Many-to-Many
Я также извиняюсь, если на этот вопрос был дан ответ в другом месте сайта. Я нашел один другой пост здесь, но не было решение предоставлено, при условии, что они столкнулись с точно такой же проблемой.
Мои модели:
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="[email protected]") # 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
. Что я делаю неправильно?
append
илиupdate
вместо выкл добавить - person hansTheFranz   schedule 28.05.2017append()
вместоadd()
и получил эту ошибку:AttributeError: 'ManyRelatedManager' object has no attribute 'append'
. Я также пытался использоватьupdate()
и получил эту ошибку:TypeError: update() takes exactly 1 argument (2 given)
. Используйте точно такое же форматирование, как и в моем посте, только замените метод add на описанный вами! К сожалению, все еще боремся здесь! - person twknab   schedule 28.05.2017