繁体   English   中英

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

[英]Django - Checking if objects exists and raising error if it does

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

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

我会做这样的事情:

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 %}

您可以使用get_or_create 它返回一个具有检索到(或创建的)对象和布尔值的元组。 如果布尔值是True当它是一个新的对象,如果它是False当对象已存在,则可以抛出所需的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM