python - 找不到 Django 用户记录
问题描述
我正在尝试通过使用客户端模型来扩展 django 中的用户模型(这可能不是理想的方式,但那艘船已经航行了)。当我尝试访问模板中的用户记录时,出现错误:
No Client matches the given query
模型.py
class Client(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
视图.py
def update_client_details(request):
if request.user.is_authenticated:
user = request.user
# print('pk', user.pk)
client = get_object_or_404(Client, pk=user.pk)
如果我打印 user.pk 我会看到我的期望。
为什么它不返回一个对象?
解决方案
因为您正在使用user.pk
in ,get_object_or_404(Client, pk=user.pk)
因为它会尝试pk
在Client
模型中查找,但在客户端模型中,根据给定的主键没有任何可用数据,get_object_or_404(Client, pk=user.pk)
因为这pk
是用户的pk
.
所以,如果你想得到对象,user
你必须写如下......
client = get_object_or_404(Client, user=user)
或者你可以使用简单的方法......
client_obj = Client.objects.get(user=request.user)
推荐阅读
- webserver - Esp8266 D1-Mini 网络服务器和 LED 闪光灯
- php - Woocommerce - 在初始化和注册按钮点击后加载 Jquery 函数
- java - Springboot OAuth2授权服务器刷新令牌未在数据库中创建
- arrays - 仅按行随机播放二维数组
- c++ - 如果我将迭代器存储在某处,是否可以在 O(1) 中从 std::list 插入/删除元素。迭代器是一种指针。对吧?
- c# - 无法从 BsonType 'Array' 异常中反序列化 'BsonDocument'
- sql-server - Django 无法使用多个主键修改 SQL Server 中的一行
- python - 在文件目录中搜索关键字
- android - 如何在 Fragments 中设置 RecyclerView OnClickListener 和 OnLongClickListener?
- sql-server - 使用 Date >= 搜索记录