Django:Query在管理命令中返回不同的结果

时间:2012-07-10 14:08:09

标签: database django django-models

我有一个名为TestCase的模型的django应用程序。目前存储在数据库中的模型有9个实例,我可以通过在shell中运行TestCase.objects.all()看到它们,并且它们也在我的视图中正确显示。

但是,在我正在运行的管理命令中,相同的查询(TestCase.objects.all())始终返回空列表。我已正确导入模型,管理命令甚至可以毫无问题地向数据库添加条目,因此从数据库中读回应该不是问题。

关于可能导致这种情况的任何想法?

某些上下文:django应用程序是显示和管理测试用例的前端。管理命令将测试结果读入DB。我需要在管理命令中访问数据库以将测试运行合并到应用程序中 - 如果测试用例提供了测试运行(整数),则使用它,但如果没有,则命令将测试运行设置为1加上应用程序中已存在最大测试运行 - 这是我需要访问数据库的位置(使用类似TestCase.objects.all().aggregate(Max('test_run'))的内容)。

我正在使用Django 1.4。

这是管理命令:

from django.core.management.base import NoArgsCommand
from django.core.management.base import AppCommand, CommandError
from mainapp.models import TestCase
from django.utils import timezone
from django.db.utils import IntegrityError
from django.conf import settings
from django.core import management
from django.db.models import Max 

import cPickle
import errno

class Command(NoArgsCommand):
  def handle_noargs(self, **options):
    management.call_command('reset', 'mainapp', interactive=False) 
    print "ALL: %s" % TestCase.objects.all()
    self.traverse()

  def traverse(self):
    ...

输出为ALL: []。我省略了traverse()方法的来源,但在此之前问题是可见的,所以它不应该影响任何东西。

以下是shell中显示DB中实例的输出:

[as@as-mac  ui]$ pm shell
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from mainapp.models import TestCase
>>> TestCase.objects.all()
[<TestCase: internet explorer 8 on WIN7 at https://www.google.com/ >, <TestCase:     internet explorer 8 on WIN7 at https://www.google.com/ >, <TestCase: internet explorer 8 on WIN7 at https://www.google.com/search?q=mooo >, <TestCase: internet explorer 8 on WIN7 at https://www.google.com/search?q=mooo >, ...]
>>> TestCase.objects.count()
454

请随时询问更多详情!

1 个答案:

答案 0 :(得分:0)

您的Command的以下行正在重置数据库并清除数据:

management.call_command('reset', 'mainapp', interactive=False) 

如果删除此行,则shell和命令中的记录计数将是等效的。