Django:检索对象的最佳方式

2024-03-19

假设我有一堂课Person有一个字段email。我想根据查询集获取一条记录并将其分配给变量person。遗憾的是我做不到

person = Person.objects.filter(email="[email protected] /cdn-cgi/l/email-protection")[0]

因为我可能会遇到例外。所以:

场景1:将上面的代码包含在 try-except 中。

场景2(我目前正在使用):

person_arr = Person.objects.filter(email="[email protected] /cdn-cgi/l/email-protection")
if person_arr.exists():
    person = person_arr[0]
    ....

场景3

for person in Person.objects.filter(email="[email protected] /cdn-cgi/l/email-protection"):
    ....

场景4: 你建议别的。


我认为以下两种正确的做法:

  1. 尝试除外解决方案(您的 Scenario1 ):

    try:
        person = Person.objects.get(email="[email protected] /cdn-cgi/l/email-protection")
    except Person.DoesNotExist:
        person= None
    
  2. Django 1.6+ 解决方案使用first() https://docs.djangoproject.com/en/1.11/ref/models/querysets/#first(受到推崇的):

    person = Person.objects.filter(email="[email protected] /cdn-cgi/l/email-protection").first()
    

这是来自文档:

返回查询集匹配的第一个对象,如果有则返回 None 没有匹配的对象。如果 QuerySet 没有定义排序,则 查询集自动按主键排序。

如果该对象不存在,该解决方案将允许您执行任何您想做的操作。

请注意,只有在没有重复的电子邮件的情况下,这才有效,这在这种情况下完全有意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django:检索对象的最佳方式 的相关文章

随机推荐