匹配查询不存在错误

问题描述 投票:0回答:2

这个网站上有很多人对我有类似的问题,但我似乎无法找到一个以我想要的方式解决它的问题。

我正在尝试从数据库中获取密码,以便我可以自动发送电子邮件。要做到这一点,我打电话给Credential.objects.get(username='foo').password。这是我得到错误的地方。真正奇怪的是我已经在python控制台中访问了这个数据库,并在其中创建了一行。我不知道为什么它没有出现!

其他人似乎建议做以下事情:

try:
    Credential.objects.get(username='foo').password
except Exception as e:
    return None

这样做就是确保程序不会返回错误。这对我没有帮助,因为这不会失败。必须发送一封电子邮件,此电话必须获得该电子邮件。我几乎可以肯定我正在为此调用正确的功能,但之前我错了。任何有关这方面的帮助将不胜感激。


credential.py(出于安全原因不提供max_length):

import d_models as models

class Credential(models.Model):
    username = models.CharField()
    password = EncryptedCharField()

python django database
2个回答
0
投票

以下可能会清除您的概念。

from django.core.exceptions import ObjectDoesNotExist

try:
    Credential.objects.get(username='foo').password
except ObjectDoesNotExist:
#If User with username='foo' does not exist in database then it will comes #in exception.
#Even if there are multiple entries in database with username='foo' then also it will give you error for this you need to use another exception. 
    return "What ever you want to return on exception"

或者你可以尝试:

python manage.py shell
for user in Credentials.objects.all():
    print username
    print password

并检查数据库中可用的用户数(在settings.py文件中配置)。


0
投票

经过两个小时的查看我的代码,我意识到我是个白痴。

我遗漏的一件事是我在一个测试用例中运行了这个函数,它将单独的空白测试数据库分开。函数调用不起作用,因为它试图进入错误的数据库!

为了解决这个问题,我刚刚调用:./manage.py dumpdata --format json --indent 4 -o ./full/path/to/file/credential.json并将fixtures = ['./full/path/to/file/credential.json']放在测试类的顶部。感谢大家的建议!希望我没有浪费太多时间!

© www.soinside.com 2019 - 2024. All rights reserved.