F()
#
https://docs.djangoproject.com/en/4.2/ref/models/expressions/#f-expressions
F() 개체는 모델 필드의 값, 모델 필드의 변환된 값 또는 주석이 달린 열을 나타냅니다. 이를 통해 모델 필드 값을 참조하고 이를 사용하여 데이터베이스 작업을 수행할 수 있으므로 실제로 데이터베이스에서 파이썬 메모리로 가져올 필요 없이 데이터베이스 작업을 수행할 수 있습니다.
ORM을 사용할 때 파이썬이 아니라 DB 자체 쿼리를 사용하게 만들어주는 메서드.
Post.objects.annotate(title=F("post__comment")).values("title")
high performance#
벌크 업데이트를 수행할 때 파이썬으로 가져올 필요가 없으므로 성능이 높다.
Reporter.objects.update(stories_filed=F("stories_filed") + 1)
race conditions#
또, DB가 필드 값을 업데이트 하므로 race condition이 일어나지 않는다는 점도 장점이라고
returns PK rather than model instance#
Company.objects.annotate(built_by=F("manufacturer"))[0]
Q()
#
- https://docs.djangoproject.com/en/4.2/topics/db/queries/#complex-lookups-with-q-objects
AND(&
), OR(|
), NOT(~
), XOR(^
) 연산을 좀 더 편하게 만들어준다.
Poll.objects.get(
Q(question__startswith="Who"),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
)