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

在 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()


大话西游666
浏览 120回答 3
3回答

慕森卡

使用.first()(或last())one_or_none = M.objects.filter(some_filter_expr).first()因此,该变量one_or_none将具有 model 的实例M或None您可以按以下方式处理多于货币元素的条件或单独的条件,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()

aluckdog

您可以使用.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()

慕仙森

您可以使用来获取单个元素,并处理案例和案例.get()的异常。DoesNotExistMultipleObjectsReturnedfrom 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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python