Django查询不起作用

Posted

技术标签:

【中文标题】Django查询不起作用【英文标题】:Django query not working 【发布时间】:2011-11-29 22:10:37 【问题描述】:

事情就是这样。我有一个名为 User 的模型和一个统计页面访问次数的属性计数器。因此,如果用户已经存在,我必须查询数据库并且该用户只增加计数器。否则,创建一个新用户。我在 get 方法中有一个烦人的错误。我怎样才能超越它?

如果 request.method == 'POST':
        表单 = 用户表单(request.POST)
        如果 form.is_valid():
            u = form.save()
            尝试:
                obj = User.objects.get(user=u.user)
                obj.counter += 1
                obj.ipaddress = request.META['REMOTE_ADDR']
                obj.save()
            除了 Statistic.DoesNotExist:
                ip = request.META['REMOTE_ADDR']
                obj = User(user=u.user, counter=1, ipaddress=ip)
                obj.save()
            返回'状态':'OK'
        别的:
            返回 'errors': form.errors
    返回'状态':'不行。 GET 方法'
这是错误
get() 返回了多个用户——它返回了 2!查找参数是 

【问题讨论】:

你的恼人错误是什么?,你不应该是except User.DoesNotExist吗? 【参考方案1】:

这意味着在您的数据库中有多个用户匹配该查询。 get 应该只用于获取一个。看来您已经为此编码,但我认为您捕获了错误的异常类型。尝试改变

except Statistic.DoesNotExist:

from django.core.exceptions import DoesNotExist
except DoesNotExist:

【讨论】:

我发现它提高了可读性。只是个人喜好。 我相信它也不会捕获由同一 try 块中另一个类的 get 引发的异常,因此您可以区分您期望的错误和你不是。 是的。允许细粒度控制。【参考方案2】:

Django 在他们的 QuerySet API 上有很棒的文档。 https://docs.djangoproject.com/en/dev/ref/models/querysets/

get 只返回 1 个查询集。如果没有找到查询集,或者返回超过 1 个查询集,则会引发错误。 要捕获此特定错误,您必须指定 except User.MultipleObjectsReturned

【讨论】:

以上是关于Django查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章

django - 内部连接查询集不起作用

Django反向过滤查询集外键示例不起作用

Django defer() 和 only() 查询集不起作用?

为啥这个(Django)“过滤器”功能不起作用?

Django - 为啥视图中的“默认值”不起作用?

Axios 授权不起作用 - VueJS + Django