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@Sayse
SomeForm
是用于发布报价信息的表单。如果所有字段输入正确,则视为“有效”。在保存信息之前,我需要检查报价编号(唯一标识符)是否已放入表中。您可以使用messages框架进行“显示错误”部分。
SomeForm
是否涉及报价?理想情况下,如果它真的无效,那么它就不应该有效t@Sayse
SomeForm
是用于发布报价信息的表单。如果所有字段输入正确,则视为“有效”。在保存信息之前,我需要检查报价编号(唯一标识符)是否已放入表中。您可以使用messages框架进行“显示错误”部分。我没有意识到
.exists()
只对查询集有效。我刚刚检查了代码,它工作得很好。谢谢你的快速回答!我没有意识到
.exists()
只对查询集有效。我刚刚检查了代码,它工作得很好。谢谢你的快速回答!