twk*_*nab 0 python django many-to-many django-orm manytomanyfield
我正在构建一个 Django 应用程序,有 2 个模型:User和Secret. 秘密可以由用户制作,其他用户可以“喜欢”它们。我已将我的likes字段设置为 a ManyToManyField,以便喜欢 Secret 的 Users 可以存储在那里并稍后检索等。但是,当我尝试查询 User 和 Secret 并使用时my_secret.likes.add(my_User) 什么也没有发生。我没有收到错误消息,当我打印我的 Secretmany-to-many likes字段时,添加后,我看到:secrets.User.None.
为什么我的add()方法正在运行,但我没有收到任何错误,为什么我的用户没有正确添加到我的 Secret 的赞中?
注意:我在最初创建时保存了 User 和 Secret 对象。在这个应用程序之外,我已经能够add()很好地使用该方法,但在那些场景中,我正在创建对象,而不是检索已经存在的对象。
add()使用从查询中检索到的数据时是否有不同的处理方式?这是我现在唯一的其他推理方式,我完全按照此处的文档进行操作:Django Many-to-Many Docs
如果在网站的其他地方回答了这个问题,我也深表歉意。我确实在这里找到了另一篇文章,但没有提供解决方案,因为他们遇到了完全相同的问题。
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.
Run Code Online (Sandbox Code Playgroud)
模型迁移良好,一切似乎都在正确的语法中。但是,当我尝试检索 aUser和 aSecret并将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?
Run Code Online (Sandbox Code Playgroud)
为什么在my_secret.likes上面打印时,什么都不打印?
特别是当:tim.secret_set.all()显示包含id=2上面示例中的秘密时
......所以User记录与 的关系Secret,但未Secret记录与 的任何关系User。我究竟做错了什么?
您需要调用的all 许多一对多现场查看的方法,所有相关的对象:
print my_secret.likes.all()
# ^^^^^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |