繁体   English   中英

Django 模型 .get 失败,但 .filter 和 .all 有效 - 对象存在于数据库中

[英]Django Models .get fails but .filter and .all works - object exists in database

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM