为什么我的“多对多”Django 模型中的 Django 的“add()”方法没有采用?

Why is Django's `add()` method in my `many-to-many` Django models not taking?

问题/难题:

我正在构建一个 Django 应用程序,有 2 个模型:UserSecret。用户可以创建秘密,其他用户也可以 "like" 秘密。我已将 likes 字段设置为 ManyToManyField,以便可以将喜欢 Secret 的用户存储在那里并在以后检索等。但是,当我尝试查询用户和 Secret 和使用 my_secret.likes.add(my_User) 没有任何反应。我没有收到错误,当我打印我的 Secret 的 many-to-many likes 字段时,添加后,我看到:secrets.User.None.

为什么我的 add() 方法 运行 但我没有收到任何错误,为什么我的用户没有正确添加到我的 Secret 的赞中?

注意:我在初始创建时保存了 User 和 Secret 对象。在这个应用程序之外,我已经能够很好地使用 add() 方法,但在那些场景中,我正在创建对象,而不是检索已经存在的对象。

使用从查询中检索到的数据时,是否有不同的方法来处理 add()?这是我现在唯一的其他推理,我已经完全按照此处的文档进行操作:Django Many-to-Many Docs

如果在网站的其他地方回答了这个问题,我也深表歉意。我确实找到了一个 other post here,但是没有提供解决方案,假设他们遇到了完全相同的问题。

我的模特:

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.

问题示例:

模型迁移良好,一切似乎都符合正确的语法。但是,当我尝试检索 UserSecret,并将 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 的任何关系。我做错了什么?

需要调用多对多字段的all方法才能查看所有相关对象:

print my_secret.likes.all()
#                     ^^^^^