![](/img/trans.png)
[英]How to create a decorator that works on class-based views function and class?
[英]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()
它將返回單個對象,或者返回DoesNotExist
或MultipleObjectsReturned
異常。 DoesNotExist
結果為404。 DoesNotExist
處理的MultipleObjectsReturned
會傳播到您的代碼中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.