2012-07-10 96 views
1

我有一個名爲TestCase的模型的django應用程序。目前存儲在數據庫中的模型有9個實例,我可以通過在shell中運行TestCase.objects.all()來看到它們,並且它們也可以在我的視圖中正確顯示。Django:查詢返回管理命令中的不同結果

但是,在我運行的管理命令中,相同的查詢(TestCase.objects.all())始終返回一個空列表。我已經正確地導入了模型,並且管理命令甚至能夠毫無問題地向數據庫添加條目,因此從數據庫讀迴應該不成問題。

關於可能導致此問題的任何想法?

一些上下文:django應用程序是顯示和管理測試用例的前端。管理命令將測試結果讀入數據庫。我需要在管理命令中訪問數據庫以將測試運行集成到應用程序中 - 如果測試用例提供了測試運行(整數),則會使用它,但是如果不是,則該命令將測試運行設置爲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()方法的來源,但問題在此之前是可見的,所以它不應該影響任何內容。

下面是從外殼顯示在數據庫實例的輸出:

[[email protected] 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 

請隨時詢問更多詳情!

+0

您使用哪個Django版本?您還使用哪個基本管理命令(應用程序,標籤,NoArgs ..)?一些例子可能非常有用。 – Tisho 2012-07-31 15:52:11

+0

好的,所以你要重置前一行的數據庫,這會破壞數據庫中的所有數據。你期望在TestCase.objects.all()的下一行得到什麼?我不明白這裏有什麼意思.. – Tisho 2012-07-31 16:17:02

回答

0

你的命令的以下行復位數據庫和信息交換的數據:

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

如果刪除此行,在外殼和命令的記錄數將是等效的。

+0

是啊,你是對的,正如Tisho先前指出的那樣。愚蠢的問題>< – 2012-07-31 20:42:23