簡體   English   中英

Django:嘗試了解queryset屬性在基於類的通用視圖中如何工作

[英]Django: trying to understand how the queryset attribute works in class-based generic views

在Django中使用基於類的通用視圖時,具有queryset屬性意味着“限制”視圖將在其上操作的對象的集合,對嗎?

如果提供了queryset,則該queryset將用作對象的源。 Django的get_object()

模型:

from django.db import models

class Person(models.Model):
    full_name = models.CharField(max_length=30)
    is_active = False

視圖:

from django.views.generic import DetailView
from books.models import Person

class PersonDetail(DetailView):
    queryset = Person.objects.filter(is_active=True)

queryset以上可以確保只考慮對象is_active=true

但這在內部如何運作?

例如:Django是否將SQL條件AND is_active=TRUE附加到視圖中的每個查詢?

好的,最后一個例子看起來很愚蠢,但我希望您能理解我的問題。 謝謝。

是的,這正是發生的情況。 視圖的get_object方法將您的queryset用作基本get_object 然后,它應用一個附加的過濾器來獲取特定的對象(例如,按ID):

queryset = queryset.filter(pk=pk)

當然,視圖需要單個對象,而不是查詢集,因此它可以:

obj = queryset.get()

它將返回單個對象,或者返回DoesNotExistMultipleObjectsReturned異常。 DoesNotExist結果為404。 DoesNotExist處理的MultipleObjectsReturned會傳播到您的代碼中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM