django QuerySet에서 자주 사용되고 흔치 않은 기교들
QuerySet
엔트리 같아.Objects.all (), 이 동작들은QuerySet 대상을 되돌려줍니다. 이 대상은 비교적 특별합니다. Objects를 실행하는 것이 아닙니다.all(), 또는 Filter 이후에 데이터베이스와 상호작용을 할 것입니다. 구체적으로 공식 문서를 참고하고 데이터베이스와 상호작용하는 상황:
https://docs.djangoproject.com/en/dev/ref/models/querysets/
Internally, a QuerySet can be constructed, filtered, sliced, and generally passed around without actually hitting the database. No database activity actually occurs until you do something to evaluate the queryset.
print queryset query sql
1. list(Entry.Objects.all())
2. for e in Entry.Objects.all():pass
#
3. Entry.Objects.all()[2:10]
# ,sql limit ,
Q 및 F
F class
from django.db.models import F
Instances of F() act as a reference to a model field within a query. These references can then be used in query filters to compare the values of two different fields on the same model instance.
이것은 바로 F가 대상의 특정한 열 값을 전문적으로 취하는 것이다. 예를 들어'QuerySet은 한 모델의 두 필드가 같은지 판단한다'.
Q class
from django.db.models import Q
Keyword argument queries – in filter(), etc. – are “AND”ed together. If you need to execute more complex queries (for example, queries with OR statements), you can use Q objects.
문서에서 Q를Complexlookups with Qobjects에 놓으면 Q는 복잡한 조회를 하는 것을 알 수 있다
and --> XX.objects.filter(Q(f=1),Q(f=2)) # f == 1 and f == 2
or --> XX.objects.filter(Q(f=1) | Q(f=2)) # f ==1 | f == 2
not --> XX.objects.filter(~Q(f=1),Q(f=2)) # f != 1 and f == 2
어떤 필드가null인지 판단합니다
_tasks = tasks.exclude(group__isnull=True)
각종 쌍하강선에 대응하는 각종 방법, 문서querysets field lookup 참조
https://docs.djangoproject.com/en/1.6/ref/models/querysets/#field-lookups
QuerySet !=
예를 들어 모델은 두 열이 있는데 한 열은user라고 하고 한 열은assigned 라고 한다user, 요구 사항은 user를 꺼내는 것입니다!=1의 기록,django에서는 사용할 수 없습니다! =,Q가 필요해요.
from django.db.models import Q
direct_comment = _tasks.filter(~Q(user=1))
Q 이렇게 할 수도 있고,user = 1 또는 2의 원소
direct_comment = _tasks.filter(Q(user=1) | Q(user=2))
QuerySet에서 모델 두 필드가 같은지 판단
from django.db.models import F
model user, assigned_user,
user=assigned_user
direct_comment = _tasks.filter(user=F('assigned_user'))
django group_by
일부 검색된 QuerySet에 대해 그룹을 나누는 것은 여전히 흔한 일이다
def group_by(query_set, group_by):
'''util:django '''
assert isinstance(query_set, QuerySet)
django_groups = query_set.values(group_by).annotate(Count(group_by))
groups = []
for dict_ in django_groups:
groups.append(dict_.get(group_by))
return groups
:
assign_to = _tasks.exclude(user=F('assigned_user'))
groups = group_by(assign_to, 'group')
groups = [1L, 3L, 4L]
건더기
django issue
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.