Python Django Models.get失败,但数据库中存在.filter和.all works-object
这件事让我绞尽脑汁。该模型似乎是正确的,从理论上讲,所有注释的排列都应该有效——但唯一能够成功检索用户的是.filter和.all。得到不起作用;我可以使用.filter或.all,但为什么不能工作呢 我将重申,在这种情况下,直接SQL查询100%有效。所有导入都已就绪,并且在较低的级别上运行良好——同样,过滤器可以正常工作,但get由于某些原因失败Python Django Models.get失败,但数据库中存在.filter和.all works-object,python,sql,django,tdd,models,Python,Sql,Django,Tdd,Models,这件事让我绞尽脑汁。该模型似乎是正确的,从理论上讲,所有注释的排列都应该有效——但唯一能够成功检索用户的是.filter和.all。得到不起作用;我可以使用.filter或.all,但为什么不能工作呢 我将重申,在这种情况下,直接SQL查询100%有效。所有导入都已就绪,并且在较低的级别上运行良好——同样,过滤器可以正常工作,但get由于某些原因失败 class UserModelTest(TestCase): def test_getUserByUsername(self): sani
class UserModelTest(TestCase):
def test_getUserByUsername(self):
sanity = True
try:
#u = User.objects.filter(username='wadewilliams')
u = User.objects.get(username='wadewilliams')
#u = User.objects.get(pk=15773)
#u = User.objects.all()
print u
except User.DoesNotExist:
sanity = False
self.assertEqual(sanity, True)
。。。该测试失败,除非我取消对筛选器或所有。。。两个都有,不行
而模型
class User(models.Model):
userid = models.IntegerField(primary_key=True, db_column='userID')
username = models.CharField(max_length=135)
realname = models.CharField(max_length=150, db_column='name')
email = models.CharField(max_length=765, blank=True)
class Meta:
db_table = u'users'
def __unicode__(self):
return self.username + ' (' + self.email + ')'
测试套件创建了一个空白的模拟数据库,因此即使生产/开发数据库中存在用户,也找不到用户 从文档中: 运行测试时从生产数据库中查找数据?
如果您的代码试图在编译数据库模块时访问数据库,则这将在设置测试数据库之前发生,并可能导致意外结果。例如,如果在模块级代码中有一个数据库查询,并且存在一个真实的数据库,那么生产数据可能会污染测试。无论如何,在代码中包含这样的导入时数据库查询是一个坏主意-重写代码,使其不会执行此操作。您可以将堆栈跟踪添加到问题中吗?您得到的确切错误消息是什么?我创建了一个视图,试图为您提供堆栈跟踪。我创建了url路径并触摸了视图。它运行得非常完美。然后我重新运行了我的单元测试。。。他们通过了!!!我不知道为什么仅仅触摸视图就可以解决单元测试问题?真奇怪。谢谢你的帮助;对此的任何其他解释都非常感谢。认为这可能是unittest模块的一些奇怪之处吗?好吧,我错了两个。我省略了测试断言。当我重新添加时,测试失败了,但是视图似乎仍然可以正常工作。这是单元测试回溯。。。。。。。。。。。。。。失败:test\u getUserByUsername(forge.tests.users\u test.UserModelTest)-------------------------------------------------------------回溯(最近一次调用):文件“/media/sf\u host/checkout/33/localmotors/localmotors/forge/tests/users\u test.py”,第72行,在test\u getUserByUsername self.assertEqual中(健全,True)断言者错误:错误!=真的