首页 > 解决方案 > 找不到 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 我会看到我的期望。

为什么它不返回一个对象?

标签: pythondjango

解决方案


因为您正在使用user.pkin ,get_object_or_404(Client, pk=user.pk)因为它会尝试pkClient模型中查找,但在客户端模型中,根据给定的主键没有任何可用数据,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)

推荐阅读