把我的大脑放在这个上面。该模型似乎是正确的,理论上所有评论的排列都应该起作用 - 但是唯一可以成功检索用户的东西是.filter和.all; .get不起作用;我可以处理使用.filter或.all ----但为什么不能正常工作?
我将重申,在这种情况下,直接SQL查询可以100%运行。所有进口都已到位,而且事情在低水平上运作良好 - 再次,过滤器工作,所有工作,但由于某种原因失败。
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 + ')'
答案 0 :(得分:2)
测试套件创建一个空白的模拟数据库,因此即使存在于生产/开发数据库中,也无法找到任何用户。
来自文档: 运行测试时从生产数据库中查找数据? 如果您的代码在编译模块时尝试访问数据库,则会在设置测试数据库之前进行,这可能会产生意外结果。例如,如果您在模块级代码中有数据库查询并且存在真实数据库,则生产数据可能会污染您的测试。无论如何在代码中都有这样的导入时数据库查询是一个坏主意 - 重写代码以便它不会这样做。