django - “ForwardManyToOneDescriptor”对象没有属性“pk”
问题描述
如下行中的错误:“ForwardManyToOneDescriptor”对象没有属性“pk”
friend_user = User.objects.get(pk=Friend.to_user.id)
提前谢谢你,
模型.py
class Friend(models.Model):
status = models.CharField(max_length=10)
from_user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, related_name = 'from_user')
to_user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="to_user")
date_modified = models.DateTimeField(auto_now=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
def __str__(self):
return self.to_user.email
解决方案
related_name
指定目标模型中关系的名称,因此您的
to_user = models.ForeignKey(
AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="to_user" # <-- confusing relation name
)
添加一个关系User.to_user
。这是一个令人困惑的名称,因为这to_user
实际上与Friend
. 并且因为外键在技术上允许多个朋友引用同一个用户,所以它应该是复数。
所以一个更好的名字应该是to_friends
,它增加了Friend.to_user
and User.to_friends
:
to_user = models.ForeignKey(
AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="to_friends" # <-- better relation name
)
如果您更改了关系的名称,您可以使用以下命令找到给定用户的朋友:
friend = User.to_friends.get(id=...)
假设用户实际上有这个朋友。如果没有,你会得到一个Friend.DoesNotExist
例外。如果您想避免这种情况并结识None
朋友,请使用:
friend = User.to_friends.filter(id=...).first()
if friend is not None:
... # Do something with friend.
推荐阅读
- json - 在angular7中读取复杂的嵌套json对象数组
- php - Centos 6 与 Akeneo 的 WHM 服务器配置
- javascript - 如何在 Vue JS 模板中编写自定义 jQuery 代码
- c# - 为什么我的 .NET Core Web API(部署在 AWS Lambda 上)返回 502 Bad Gateway 错误?
- swift - 创建多行文本并将其写入文本文件(CSV)?
- excel - 使用 VBA 按变量值动态合并和居中单元格
- wordpress - 如何做“两个 301 重定向到一个 301 重定向”Wordpress
- android - Androidx:错误:无法解决:legacy-support-core-utils
- git - Git - 将生产仓库下载到本地仓库
- javascript - 打开时的 Magnific Popup 焦点按钮