2

在这个问题上绞尽脑汁。该模型似乎是正确的,理论上所有注释的排列都应该起作用——但唯一可以成功检索用户的是 .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 + ')'
4

1 回答 1

2

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

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

于 2012-11-22T05:46:07.623 回答