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

Python 在Django中获取QuerySet的一个或零个元素?,python,django,Python,Django,在Django3.1中,假设我有一些模型M,我有一个QuerySetoverM,我期望它有一个或零个元素。如何根据它是一个元素还是零元素进行分支(如果它有两个或多个元素,则引发异常),以及在具有一个元素的分支中,如何获取一个M对象: try: my_query_set = M.objects.filter(some_filter_expr) if ???: m = ??? # the one M object else: on_zero_o

在Django3.1中,假设我有一些模型
M
,我有一个
QuerySet
over
M
,我期望它有一个或零个元素。如何根据它是一个元素还是零元素进行分支(如果它有两个或多个元素,则引发异常),以及在具有一个元素的分支中,如何获取一个
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()
使用(或)

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

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()
您可以使用来检查
my_queryset
中是否存在任何数据,如果存在,则使用来获取一个对象。如果有多个对象,则会引发错误。在except块中,可以使用
多个\u对象处理它

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