πŸ”Ž Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ F-выраТСния Π² Django ORM для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов?

Π’Ρ‹ спросили ΠΎ "django orm f expression".

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ F Π² Django ORM ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для провСдСния арифмСтичСских ΠΈ логичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ нСпосрСдствСнно Π½Π° Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования выраТСния F:

from django.db.models import F

# Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля 'count' Π½Π° 1 для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
Model.objects.update(count=F('count') + 1)

Π­Ρ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля 'count' Π½Π° 1 для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ.

ИспользованиС F-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ вычислСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства запросов ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

django orm f expression

Π’ Django ORM прСдставлСно мноТСство ΠΌΠΎΡ‰Π½Ρ‹Ρ… инструмСнтов для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Один ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… инструмСнтов - Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ F. Π­Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ арифмСтичСскиС ΠΈ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ нСпосрСдствСнно Π² запросах ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ F

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ F - это инструмСнт Django ORM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ значСния ΠΏΠΎΠ»Π΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ запросов, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ для выполнСния слоТных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Оно позволяСт Π½Π°ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ значСниям ΠΏΠΎΠ»Π΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² арифмСтичСских ΠΈ логичСских опСрациях Π±Π΅Π· извлСчСния ΠΈΡ… ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ F

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ F ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ значСния поля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ поля Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ. НапримСр, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ модСль Product с полями price ΠΈ discount, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ значСния поля price ΠΏΡƒΡ‚Π΅ΠΌ вычитания значСния поля discount ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния поля price:

from django.db.models import F

Product.objects.update(price=F('price') - F('discount'))

Π’ этом случаС, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ F позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ значСния ΠΏΠΎΠ»Π΅ΠΉ price ΠΈ discount Π²Π½ΡƒΡ‚Ρ€ΠΈ запроса, Π° Π½Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ значСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования выраТСния F

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования выраТСния F.

Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ значСния поля Π½Π° Π·Π°Π΄Π°Π½Π½ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ

from django.db.models import F

Product.objects.filter(id=1).update(price=F('price') + 100)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля price Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Product Π½Π° 100.

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ значСния поля Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ

from django.db.models import F

Product.objects.filter(id=1).update(price=F('price') * 2)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля price Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Product Π½Π° 2.

ОбновлСниС значСния поля ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ нСсколько ΠΏΠΎΠ»Π΅ΠΉ

from django.db.models import F

Product.objects.filter(id=1).update(price=F('price') + F('discount') - F('tax'))

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ обновляСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля price ΠΏΡƒΡ‚Π΅ΠΌ слоТСния значСния поля discount ΠΈ вычСтания значСния поля tax.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ F являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ арифмСтичСскиС ΠΈ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ запросов ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ значСния ΠΏΠΎΠ»Π΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

How to Write Complicated Queries in Django With F Expressions

Django - F Expressions for database-level operations

Using F() Expressions | Django Tips #12

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ”Ž Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ F-выраТСния Π² Django ORM для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов?