Python Django-检查对象是否存在,如果存在则引发错误
我需要检查表中是否存在对象。如果对象不存在,我想保存它,如果它存在,我想刷新页面并告诉用户标识符(引号)已经存在。我有以下示例代码:Python Django-检查对象是否存在,如果存在则引发错误,python,django,Python,Django,我需要检查表中是否存在对象。如果对象不存在,我想保存它,如果它存在,我想刷新页面并告诉用户标识符(引号)已经存在。我有以下示例代码: def some_method(request): if request.method == 'POST': form = SomeForm(request.POST) if form.is_valid: quote = request.POST.get('quote') if
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
且对象不存在时,将引发Model.DoesNotExist
错误
您应该使用filter
而不是get
:
qs = SomeModel.objects.filter(quote_number = quote)
if qs.exists():
...
else:
...
问题是返回一个对象,但只适用于查询集。当您使用get
且对象不存在时,将引发Model.DoesNotExist
错误
您应该使用filter
而不是get
:
qs = SomeModel.objects.filter(quote_number = quote)
if qs.exists():
...
else:
...
我会这样做:
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 %}
我会这样做:
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 %}
你可以用。它返回一个元组,其中包含检索(或创建)的对象和一个布尔值。如果布尔值是新对象时的
True
,如果布尔值是False
,则当对象已经存在时,您可以抛出所需的错误。您可以使用。它返回一个元组,其中包含检索(或创建)的对象和一个布尔值。如果布尔值是新对象时的True
,如果布尔值是False
,当对象已经存在时,您可以抛出所需的错误。某种形式的是否包含引号?理想情况下,如果它真的无效,那么它就不应该有效t@SayseSomeForm
是用于发布报价信息的表单。如果所有字段输入正确,则视为“有效”。在保存信息之前,我需要检查报价编号(唯一标识符)是否已放入表中。您可以使用messages框架进行“显示错误”部分。SomeForm
是否涉及报价?理想情况下,如果它真的无效,那么它就不应该有效t@SayseSomeForm
是用于发布报价信息的表单。如果所有字段输入正确,则视为“有效”。在保存信息之前,我需要检查报价编号(唯一标识符)是否已放入表中。您可以使用messages框架进行“显示错误”部分。我没有意识到.exists()
只对查询集有效。我刚刚检查了代码,它工作得很好。谢谢你的快速回答!我没有意识到.exists()
只对查询集有效。我刚刚检查了代码,它工作得很好。谢谢你的快速回答!