1

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

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

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

一些上下文:django 应用程序是显示和管理测试用例的前端。管理命令将测试结果读入数据库。我需要在管理命令中访问数据库以将测试运行合并到应用程序中 - 如果测试用例提供了测试运行(整数),则使用它,但如果没有,则该命令将测试运行设置为一加应用程序中已经存在最大测试运行 - 这是我需要访问数据库的地方(使用类似的东西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 的输出,显示了数据库中的实例:

[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

请随时询问更多详情!

4

1 回答 1

0

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

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

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

于 2012-07-31T16:52:08.083 回答