当前位置: 代码迷 >> python >> Django-检查对象是否存在,如果存在则引发错误
  详细解决方案

Django-检查对象是否存在,如果存在则引发错误

热度:71   发布时间:2023-06-13 16:57:20.0

我需要检查表中是否存在对象。 如果对象不存在,我想保存它,如果对象不存在,我想刷新页面并告诉用户标识符(引用号)已经存在。 我有以下示例代码:

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:
    ...

我会做这样的事情:

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当对象已存在,则可以抛出所需的错误。