亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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條經驗 獲得超8個贊

您可以使用來獲取單個元素,并處理案例和案例.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 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號