Django;是否可以为queryset设置默认值

标签 django

employee = Employee.objects.filter('age' = 99)

我们假设此查询集为空。

如果我使用employee[0],它将返回索引超出范围的错误,那么这里是否可以将None作为默认值?
`employee[0] or None`? # This won't work, but this is what I mean.

最佳答案

如果只想获取一个实例,请使用 get ,而不要使用filter:

employee = Employee.objects.get(age = 99)

如果不存在,您将得到一个Employee.DoesNotExist异常,您需要捕获该异常。如果有一个超过99岁的员工,您将收到一个Employee.MultipleObjectsReturned异常,您可能想捕获该异常。

如果您感到懒惰,总是有django-annoyingget_object_or_None!
from annoying.functions import get_object_or_None

obj = get_object_or_None(Employee, age=99)

如果您不想使用所有的django-annoying,可以随时在某处添加get_object_or_None,它看起来像这样:
def get_object_or_None(klass, *args, **kwargs):
    """
    Uses get() to return an object or None if the object does not exist.

    klass may be a Model, Manager, or QuerySet object. All other passed
    arguments and keyword arguments are used in the get() query.

    Note: Like with get(), a MultipleObjectsReturned will be raised if
    more than one object is found.
    """
    queryset = _get_queryset(klass)
    try:
        return queryset.get(*args, **kwargs)
    except queryset.model.DoesNotExist:
        return None

关于Django;是否可以为queryset设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4722925/

相关文章:

python - 在 Django 上显示空的 GET 表单而不引发任何错误

Django - 覆盖的表单 save() 方法返回 None?

django - Django(音频)文件验证

python - Django FileField with upload_to 在运行时确定

mysql - Django - 未在 Docker 中创建 Mysql 数据库

python - Virtualenv 没有检测到 pip3

javascript - Django STATIC_URL 在 java 脚本代码中使用不起作用

python - 无法制作自定义 Django View 装饰器(带参数)

python - Django-Rest-Framework:如何使用 request.user 为登录用户发布到外键字段

javascript - (仍然未回答)django 复选框在数据库中保存是或否