【问题标题】:What is the best way to check if data is present in django?检查 django 中是否存在数据的最佳方法是什么?
【发布时间】:2012-06-17 00:21:50
【问题描述】:

使用 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

我想我将“最佳”定义为

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

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

【问题讨论】:

  • 应该是DemoModel.objects.filter(id=8).exists()。
  • owza。多谢兄弟。介意把它作为我支持/接受的答案吗?

标签: django


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果需要使用对象,请使用 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
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-05-25
          • 2012-08-29
          • 2016-08-16
          • 2010-09-18
          • 2011-03-20
          相关资源
          最近更新 更多