Django에서 F 함수 사용
2146 단어 django
post = Post.objects.get(...)
post.views += 1
post.save()
위의 문장은 이미 상당히 간단하지만 실제로는 더 좋은 방법이 있다. 바로
F
함수를 운용하는 것이다.from django.db.models import F
post = Post.objects.get(...)
post.views = F('views') + 1
post.save()
보아하니 모두 차이가 많지 않은 것 같지만
F
함수를 사용하면 몇 가지 현저한 장점이 있다.post.view += 1
는 파이톤이 메모리에서 조작한 다음에 메모리에서 데이터를 데이터베이스로 업데이트한다.F('views') + 1
는 직접 조작하는 데이터베이스로 조작 등급을 줄였다.post.view += 1
그 중 일부 업데이트 작업을 잃어버릴 수 있고 F('views') + 1
는 데이터베이스를 직접 조작하기 때문에 데이터를 잃어버리는 문제가 없다.F
함수가 메모리에서 작동하지 않기 때문에 데이터를 업데이트한 후 메모리의 모델 대상을 다시 갱신해야 합니다....
post.save()
#
post = Post.objects.get(...)
또는 다음과 같이 하십시오.
...
post.save()
#
post.refresh_from_db()
Done!
이외에도
F
함수는 필드 간 검색을 지원합니다.# models.py
class Age(models.Model):
year = models.IntegerField(default=6)
month = models.IntegerField(default=10)
# --------------
# year > month
res = Age.objects.filter(year__gt=F('month'))
F
함수는 플러스, 마이너스, 곱하기, 나누기, 추출 및 멱 연산을 지원합니다.Age.objects.filter(year__gt=F('month') * 2)
Age.objects.filter(year__gt=F('month') + F('year'))
또한 날짜 필드의 경우 다음을 쉽게 처리할 수 있습니다.
>>> from datetime import timedelta
>>> Entry.objects.filter(date__gt=F('pub_date') + timedelta(days=3))
관계식 간의 검색도 가능합니다.
# models.py
class Person(...):
name = ...
class People(...):
name = ...
class Age(...):
...
person = models.OneToOneField(Person, ...)
people = models.OneToOneField(People, ...)
# --------------
# person.name == user.name
res = Age.objects.filter(person__name=F('people__name'))
F
함수에는 더 높은 용법이 있다. 예를 들어 집합과의 협조는 여기에 열거하지 않고 관심 있는 것은 문서로 가서 참관할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.