(6) Django 진급길QuerySet에서
from django.db.models import Count, F, Value
from django.db.models.functions import Length, Upper
F 표현식의 일반 사용
# 。
Company.objects.filter(num_employees__gt=F('num_chairs'))
# , 。
Company.objects.filter(num_employees__gt=F('num_chairs') * 2)
Company.objects.filter(
num_employees__gt=F('num_chairs') + F('num_chairs'))
F 표현식의 조합 사용
# ?
>>> company = Company.objects.filter(
... num_employees__gt=F('num_chairs')).annotate(
... chairs_needed=F('num_employees') - F('num_chairs')).first()
>>> company.num_employees
120
>>> company.num_chairs
50
>>> company.chairs_needed
70
Upper 표현식 사용
# Upper 。
>>> company = Company.objects.create(name='Google', ticker=Upper(Value('goog')))
# , 。
>>> company.refresh_from_db()
>>> company.ticker
'GOOG'
집합과 F의 조합 사용
Company.objects.annotate(num_products=Count('products'))
Company.objects.annotate(num_products=Count(F('products')))
Company.objects.annotate(num_offerings=Count(F('products') + F('services')))
Company.objects.order_by(Length('name').asc())
Company.objects.order_by(Length('name').desc())
from django.db.models import CharField
from django.db.models.functions import Length
CharField.register_lookup(Length)
Company.objects.order_by('name__length')
F 표현식의 일부 이론
reporter = Reporters.objects.get(name=' ')
reporter.stories_filed += 1
reporter.save()
from django.db.models import F
reporter = Reporters.objects.get(name='Tintin')
reporter.stories_filed = F('stories_filed') + 1
reporter.save()
#
reporter = Reporters.objects.get(pk=reporter.pk)
#
reporter.refresh_from_db()
reporter = Reporters.objects.filter(name='Tintin')
reporter.update(stories_filed=F('stories_filed') + 1)
Reporter.objects.all().update(stories_filed=F('stories_filed') + 1)