检查django中是否存在数据的最佳方法是什么?

时间:2012-06-14 00:07:21

标签: django

使用django,这是检查数据是否存在的“方式”?

我知道我可以在get上使用try / catch块,或者检查过滤器上len的大小

try:
    DemoModel.objects.get(id=8)
catch DoesNotExist:
    catch stuff here

if not len(DemoModel.objects.filter(id=8):
    do stuff here

我想我将“最佳”定义为

一个。标准方式 湾更有效的方式

还是没有真正的区别?或者是否存在无党派的第三种方式?

4 个答案:

答案 0 :(得分:7)

如果您需要使用该对象,请使用try / catch。

try:
    object = DemoModel.objects.get(id=8)
    #use object here
catch DoesNotExist:
    #catch stuff here

如果您不需要,只需使用exists()。

if DemoModel.objects.filter(id=8).exists():
    #do stuff here

答案 1 :(得分:0)

你可以说DemoModel.objects.filter(id = blah blah blah).exists()。 try / catch模式也可以合理地工作 - 如果你想在代码中指出你真正期望对象存在的一个点,你可以使用try / catch,并在对象没有时使用.exists()子句现有的一切照旧=)

答案 2 :(得分:0)

对不起,请输入以下代码。您可能会发现它可能没有用,但仍然主题为“判断数据是否存在”。 :)模板的正确方法就是这样,否则我的api示例/文档链接应该回答你关于验证特定保存模型实例是否存在的问题。

{% for DemoModel in object_list %}
{% ifchanged %}
do something
{% else %}
do something else
{% endif %}
来自django documentation Retrievieng Objects

使用和链接过滤器:

>>> Entry.objects.filter(
...     headline__startswith='What'
... ).exclude(
...     pub_date__gte=datetime.now()
... ).filter(
...     pub_date__gte=datetime(2005, 1, 1)
... )

对不起我以为你是在谈论你作为管理员。这显然是通过API。对不起,我以为你是新手,并且在没有必要时使用模板语法。但是,理想的情况是,如果您可以在DemoModel为True或DemoModel为false的模型实例中。这样你每次都可以调用它并正确调用它。在理想的情况下,你在一个模型实例中,知道DemoModel是真或假,你可以简单地做

{%if DemoModel == True%}执行{%endif%}

假设DemoModel是一个布尔字段,如果没有,你可以包装它。此外,可以使用模板标记过滤器应用上面的api。

答案 3 :(得分:0)

if DemoModel.objects.filter(id=8).count():