Django Models .get失败,但.filter和.all工作 - 对象存在于数据库中

时间:2012-11-22 04:22:07

标签: python sql django tdd models

把我的大脑放在这个上面。该模型似乎是正确的,理论上所有评论的排列都应该起作用 - 但是唯一可以成功检索用户的东西是.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 + ')'

1 个答案:

答案 0 :(得分:2)

测试套件创建一个空白的模拟数据库,因此即使存在于生产/开发数据库中,也无法找到任何用户。

来自文档: 运行测试时从生产数据库中查找数据? 如果您的代码在编译模块时尝试访问数据库,则会在设置测试数据库之前进行,这可能会产生意外结果。例如,如果您在模块级代码中有数据库查询并且存在真实数据库,则生产数据可能会污染您的测试。无论如何在代码中都有这样的导入时数据库查询是一个坏主意 - 重写代码以便它不会这样做。