使用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
我想我将“最佳”定义为
一个。标准方式 湾更有效的方式
还是没有真正的区别?或者是否存在无党派的第三种方式?
答案 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():