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查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章