python - Django后向外键查询不起作用
问题描述
嗨,我正在使用 django 频道在 django 上开发一个聊天应用程序,当我这样做时,我正在尝试在这里查询用户的所有第一条消息
user.message_set.all()
它在扔
AttributeError at /
'User' object has no attribute 'message_set'
完整追溯:
Traceback (most recent call last):
File "/home/__neeraj__/.local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/__neeraj__/.local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/__neeraj__/Documents/chat/home/views.py", line 10, in index
print(i.messages_set.all())
AttributeError: 'User' object has no attribute 'message_set'
我的模型.py
class Message(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sender")
receiver = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="receiver"
)
text = models.CharField(max_length=2000)
created_on = models.DateTimeField(auto_now=True)
我的观点 :
def index(request):
users = User.objects.all()
context = {"users": users}
for user in users:
print(user.message_set.all())
return render(request, "index.html", context=context)
这是因为我在消息表上有用户模型的双外键引用吗?
解决方案
您指定的related_name
非常不正确。(使用您当前的配置,您可以user.receiver.all()
接收收到的消息,但这对读者来说意义不大。)
你会想要类似的东西
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="messages_sent")
receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name="messages_received")
之后您可以使用user.messages_received.all()
and user.messages_sent.all()
。
推荐阅读
- java - 使用 Jasper Reports API 6.13.0 和 Adopt OpenJDK 11 编译 Jasper 报告时出错
- vscode-extensions - 我可以写一个扩展来在 Vs 代码中打开一个编辑器吗
- ios - 使用 MediaElement 从页面返回导航后 UI 无响应,仅在 iOS 中
- android - Flutter Android 应用程序在启动时崩溃,说“正在等待天文台端口……”
- gcc - 如何在 Android 上使用带有 gcc 的 NDK?
- java - 如果用户已通过 spring @EnableWebSecurity 身份验证,我如何在 spring 之外检查,例如在 Nginx 中
- python - 当列包含空值时,Pandas to_sql 忽略 dtype
- database - mongoose.connect(. . .) 不是函数
- sql - 执行不同的存储过程后使用范围标识设置变量
- aggregate - 领域驱动设计 - 值对象的更新