Django에서 클래스 기반 제네릭 뷰를 사용할 때 queryset
속성 이 있다는 것은 뷰가 작동 할 객체 컬렉션을 "제한"한다는 의미입니다.
쿼리 세트가 제공되면 해당 쿼리 세트가 개체의 소스로 사용됩니다. ( 장고의 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는 AND is_active=TRUE
뷰의 모든 쿼리에 SQL 조건 을 추가합니까 ?
마지막 예는 꽤 어리석은 것처럼 보이지만 내 질문에 대한 아이디어를 얻으시기 바랍니다. 감사합니다.
예, 이것이 정확히 일어나는 일입니다. 쿼리 세트는 뷰의 get_object
메소드 에서 기본 쿼리 세트로 사용됩니다 . 그런 다음 추가 필터 를 적용하여 특정 개체 (예 : ID 별)를 가져옵니다.
queryset = queryset.filter(pk=pk)
물론 뷰에는 쿼리 셋이 아닌 단일 객체가 필요하므로 다음을 수행합니다.
obj = queryset.get()
단일 객체 또는 DoesNotExist
또는 MultipleObjectsReturned
예외 를 반환합니다 . DoesNotExist
결과는 404 MultipleObjectsReturned
입니다. 처리되지 않고 코드에 전파됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다