[django]django-orm에서 F 객체 사용
1601 단어 Django
전언
django 문서의 한 절은Query-related classes입니다. 관련 검색을 말합니다. 1.7에 새로 추가된 것입니다. 이 연결은 필드의 연결이지 테이블 간의 연결이 아닙니다.
테이블 연관성에는 주로 3개의 객체 F(), Q(), Prefetch()가 사용되는데, 이 중 Prefetch는 1.7에 새로 추가됐고 나머지 2개는 이전 버전부터 있었다.이전에 한 장의 표에 있는 두 개의 시간 필드를 비교하는 것이 필요했다. F라는 대상을 사용한 적이 있다. 오늘djangocon의 ppt를 볼 때 또 새로운 용법을 발견하여 문서를 조회하고 요약했다.
콘셉트
class F () 는 모델 필드를 대표하는 값입니다. 즉, 특수한 필드에 대한 작업은python으로 데이터를 메모리에 먼저 꺼내서 db에 저장할 필요가 없습니다.
장면
몇 가지 자주 사용하는 정경
필드 +1(가감 곱하기 나누기 연산)
예를 들어 우리는 클릭 수를 통계하는 필드가 있는데 매번 업데이트하는 작업은 사실 필드의 값을 1로 추가하는 것이다.
일반적으로 우리의 방법은 이 기록을 꺼내서 상응하는 필드를 +1을 더한 다음save에서 아래의 코드와 유사하게 하는 것이다.
# Tintin filed a news story!
reporter = Reporters.objects.get(name='Tintin')
reporter.stories_filed += 1
reporter.save()
우리가 F ()를 사용한 후에는?코드 한 줄만 있으면 돼요.
Reporters.objects.filter(name='Tintin').update(stories_filed=F('stories_filed') + 1)
코드량이 적을 뿐만 아니라 이것은 데이터에서 직접 조작하는 것이기 때문에 효율도 높아졌다. 특히 병발하는 상황은 여러 라인의 동시 조작이 가져오는 위험을 감소시켰다.문자열 추가 작업은 지원되지 않습니다.
필드 비교
예를 들어 한 계약에는 두 개의 날짜가 있는데 하나는 종지일, 하나는 종지일이라고 한다. 지금은 종지일이 종지일보다 적은 계약을 선별해야 한다.
from django.db.models import F
from contracts.models import Contracts
contracts = Contracts.objects.filter(contract_stop_time__lt=F('end_time'))
만약 F 대상이 없다면,rom을 직접 사용하여 조회할 수 없습니다.
소결
현재 이 두 가지 용법이 발견되었는데, 만약 새로운 용법이나 확장이 있다면 갱신하고 있다.
본문은 나온다
"orangleliu 노트북
”
블로그, 전재는 반드시 이 출처를 보존해 주십시오http://blog.csdn.net/orangleliu/article/details/40431839
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.