0

我有下一个模型:

class People(models.Model):
    name = models.CharField(max_length=100)
    lastname = models.CharField(max_length=100) 

在views.py

- 当我尝试这个时:

 if People.objects.get(id=my_id):
        o=People.objects.get(id=my_id)
        oh=o.name
    else:
        send_notification_to_add_that_id(my_id)

我明白了:

People query matching does not exist. 

我想要的是my_id在我的People表中查询,如果与该记录匹配,则获取id,否则触发该send_notification_to_add_that_id方法。当第一个“如果条件”没有这样的记录时,我遇到了错误。如何绕过这个问题?知道表中是否存在记录的好方法是什么?

4

1 回答 1

4

抛出异常

如果没有与查询匹配的结果,get() 将引发 DoesNotExist 异常。

所以你需要处理它:

try:
    People.objects.get(id=my_id)
except People.DoesNotExist:
    send_notification_to_add_that_id(my_id)

或者你可以做

people = People.objects.filter(id=my_id)
if people.exists():
    person = people[0]

filter如果没有结果,as不会引发异常 - 它只是返回一个空值QuerySet,但这会冒返回多个对象的风险,因此它不像第一个示例那样有意义。

顺便说一句,调用你的模型更有意义,Person而不是People因为那是你的模型所代表的,或者在数据库的情况下,你的表中的每一行。

于 2012-11-01T18:38:00.667 回答