为了账号安全,请及时绑定邮箱和手机立即绑定

在 Django 中获取 QuerySet 的一个或零个元素?

在 Django 中获取 QuerySet 的一个或零个元素?

大话西游666 2023-06-27 13:07:12
在 Django 3.1 中,假设我有一些 model M,并且我有一个QuerySetoverM我期望有一个或零个元素。如何分支它是否是一个或零个元素(如果有两个或多个则抛出异常),并且在具有一个元素的分支中,如何获取一个对象M:try:    my_query_set = M.objects.filter(some_filter_expr)    if ???:        m = ??? # the one M object    else:        on_zero_objects()except ???:    more_than_one_object()
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

使用.first()(或last()

one_or_none = M.objects.filter(some_filter_expr).first()

因此,该变量one_or_none将具有 model 的实例MNone


您可以按以下方式处理多于货币元素的条件或单独的条件,

my_query_set = M.objects.filter(some_filter_expr)

try:

    my_query_set[1]

    handle_more_than_one_element()

except IndexError:

    try:

        my_query_set[0]

        handle_only_one_element()

    except IndexError:

        handle_no_element()


查看完整回答
反对 回复 2023-06-27
?
aluckdog

TA贡献1847条经验 获得超7个赞

您可以使用.exists()检查 中是否存在任何数据my_queryset,如果有,则使用.get()获取一个对象。如果有多个对象,则会引发MultipleObjectsReturned错误。在 except 块中,您可以使用 来处理它more_than_one_object


my_query_set = M.objects.filter(some_filter_expr)

try:

    if my_query_set.exists()

        m = my_query_set.get()

    else:

        on_zero_objects()

except MultipleObjectsReturned:

    more_than_one_object()


查看完整回答
反对 回复 2023-06-27
?
慕仙森

TA贡献1827条经验 获得超7个赞

您可以使用来获取单个元素,并处理案例和案例.get()的异常。DoesNotExistMultipleObjectsReturned


from django.core.exceptions import MultipleObjectsReturned


...


try:

    model_object = M.objects.get(some_filter_expr)

except M.DoesNotExist:

     on_zero_objects()

except MultipleObjectsReturned:

     more_than_one_object()


查看完整回答
反对 回复 2023-06-27
  • 3 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信