Django - 检查对象是否存在,如果出现错误
问题描述:
我需要检查表中是否存在对象。如果对象不存在,我想保存它,如果它存在,我想刷新页面并告诉用户标识符(引号)已经存在。我有这样的例子代码:Django - 检查对象是否存在,如果出现错误
def some_method(request):
if request.method == 'POST':
form = SomeForm(request.POST)
if form.is_valid:
quote = request.POST.get('quote')
if SomeModel.objects.get(quote_number = quote).exists():
refresh with error #not sure how to do
else:
save object #I can do this part
我遇到的问题是,当我检查对象存在(和它),那么代码将引发一个错误,说它击中前的对象不存在if
。这意味着在网页上充满了编码信息,而不是刷新并给用户留言。
我希望能够为用户输入一个新的报价编号,而不是让开发者错误页面显示出来,让他们有一点点弹出消息。
我正在以正确的方式去解决这个问题吗?
答
问题是get
返回一个对象,但exists
只适用于查询集。当您使用get
并且该对象不存在时,将会引发Model.DoesNotExist
错误。
您应该使用filter
而不是get
:
qs = SomeModel.objects.filter(quote_number = quote)
if qs.exists():
...
else:
...
+0
我没有意识到''.exists()'只适用于查询集。我只是检查了代码,它完美地工作。谢谢你们的快速响应! – GreenSaber
答
我会做这样的事情:
from django.http import HttpResponseRedirect
from django.contrib import messages
...
try:
some_object = SomeModel.objects.get(quote_number=quote)
message.warning(request, 'some message')
return HttpResponseRedirect('some-url')
except SomeModel.DoesNotExist:
some_object = SomeModel.objects.create(quote_number=quote)
...
而且在模板中,你可以像这样显示消息:
{% if messages %}
{% for message in messages %}
{{message}}
{% endfor %}
{% endif %}
'SomeForm'是否涉及报价?理想情况下,如果它不是真的不应该有效 – Sayse
@Sayse'SomeForm'是发布有关报价信息的表单。如果所有字段都输入正确,则认为它是“有效”的。如果报价编号(这是唯一标识符)已经放入表格中,我需要在信息保存之前进行检查。 – GreenSaber
您可以使用消息框架来显示“显示错误”部分。 https://docs.djangoproject.com/en/1.10/ref/contrib/messages/ – Chris