3

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

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

IE

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

或者

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

我想我将“最佳”定义为

一个。标准方式 b. 更有效的方式

还是没有真正的区别?还是有无党派的第三种方式?

4

4 回答 4

7

If you need to use the object, use try/catch.

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

If you don't need to, just use exists().

if DemoModel.objects.filter(id=8).exists():
    #do stuff here
于 2012-06-14T01:11:36.010 回答
0

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

于 2012-06-14T05:38:45.140 回答
0

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

{% for DemoModel in object_list %}
{% ifchanged %}
do something
{% else %}
do something else
{% endif %}

来自 django 文档Retrievieng Objects using and chaining filters:

>>> 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 local 可以使用模板标签过滤器来应用。

于 2012-06-14T05:13:37.083 回答
0

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

于 2012-06-14T01:06:04.907 回答