πŸ’» Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ составной ΠΊΠ»ΡŽΡ‡ Π² Django для эффСктивного взаимодСйствия с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

Боставной ΠΊΠ»ΡŽΡ‡ Π² Django

Боставной ΠΊΠ»ΡŽΡ‡ Π² Django β€” это ΠΊΠ»ΡŽΡ‡, состоящий ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ примСнСния составного ΠΊΠ»ΡŽΡ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ модСль Book с полями title ΠΈ author. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ составной ΠΊΠ»ΡŽΡ‡ Π½Π° этих Π΄Π²ΡƒΡ… полях:


from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    
    class Meta:
        unique_together = ('title', 'author')

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, значСния поля title ΠΈ author Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ вмСстС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… записях. Если Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ запись с ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями title ΠΈ author, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ошибка.

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

Боставной ΠΊΠ»ΡŽΡ‡ Π² Django

ΠŸΡ€ΠΈΠ²Π΅Ρ‚! Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ составных ΠΊΠ»ΡŽΡ‡Π°Ρ… (composite keys) Π² Django ΠΈ ΠΈΡ… использовании Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Боставной ΠΊΠ»ΡŽΡ‡ - это ΠΊΠ»ΡŽΡ‡, состоящий ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вмСстС ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Для Π½Π°Ρ‡Π°Π»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования составного ΠΊΠ»ΡŽΡ‡Π° Π² модСлях Django.


from django.db import models

class User(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    age = models.IntegerField()

    class Meta:
        unique_together = ('first_name', 'last_name')
    

Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° модСль `User` с трСмя полями: `first_name`, `last_name` ΠΈ `age`. Однако, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ мСтакласс `Meta` с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ `unique_together`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ значСния ΠΏΠΎΠ»Π΅ΠΉ `first_name` ΠΈ `last_name` Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ вмСстС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ устанавливаСм составной ΠΊΠ»ΡŽΡ‡ для ΠΌΠΎΠ΄Π΅Π»ΠΈ `User`, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ записи Π½Π° основС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ этих ΠΏΠΎΠ»Π΅ΠΉ.

БоставныС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ созданиС Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ записСй с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ комбинациями ΠΏΠΎΠ»Π΅ΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ `User` Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ значСниями ΠΏΠΎΠ»Π΅ΠΉ `first_name` ΠΈ `last_name`.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ модСль с составным ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Django для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

БозданиС записи

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ запись с использованиСм составного ΠΊΠ»ΡŽΡ‡Π°.


user = User(first_name='John', last_name='Doe', age=25)
user.save()
    

Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ `User` с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями для ΠΏΠΎΠ»Π΅ΠΉ `first_name` ΠΈ `last_name`, Π° Π·Π°Ρ‚Π΅ΠΌ сохраняСм Π΅Π³ΠΎ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° `save()`. Если значСния этих ΠΏΠΎΠ»Π΅ΠΉ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ вмСстС, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрировано ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ `IntegrityError`.

Запросы ΠΊ составному ΠΊΠ»ΡŽΡ‡Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ запросы ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ с использованиСм составного ΠΊΠ»ΡŽΡ‡Π°.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ записи


user = User.objects.get(first_name='John', last_name='Doe')
    

Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ запись ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ `User` Π½Π° основС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ `first_name` ΠΈ `last_name`. Если такая запись Π½Π΅ сущСствуСт, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрировано ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ `User.DoesNotExist`.

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ записСй


users = User.objects.filter(age__gte=18)
    

Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌ записи ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ `User`, выбирая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля `age` большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ 18.

ОбновлСниС записи


user = User.objects.get(first_name='John', last_name='Doe')
user.age = 30
user.save()
    

Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ запись ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ `User` ΠΈ измСняСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля `age` Π½Π° 30, Π° Π·Π°Ρ‚Π΅ΠΌ сохраняСм измСнСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

УдалСниС записи


user = User.objects.get(first_name='John', last_name='Doe')
user.delete()
    

Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ удаляСм запись ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ `User` Π½Π° основС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ `first_name` ΠΈ `last_name`.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ составного ΠΊΠ»ΡŽΡ‡Π°

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ составной ΠΊΠ»ΡŽΡ‡, рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния ΠΈ сцСнарии, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, составной ΠΊΠ»ΡŽΡ‡ позволяСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ созданиС Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ записСй с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ комбинациями ΠΏΠΎΠ»Π΅ΠΉ.

Бвязи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ

БоставныС ΠΊΠ»ΡŽΡ‡ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для создания связСй ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ. НапримСр, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ `Author` ΠΈ `Book`, Π³Π΄Π΅ `Book` Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° `Author`, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ составной ΠΊΠ»ΡŽΡ‡, состоящий ΠΈΠ· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π°Π²Ρ‚ΠΎΡ€Π° ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΊΠ½ΠΈΠ³ΠΈ.


class Author(models.Model):
    name = models.CharField(max_length=50)

class Book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    book_id = models.IntegerField()

    class Meta:
        unique_together = ('author', 'book_id')
    

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ `Author` ΠΈ `Book`, Π³Π΄Π΅ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ `Book` внСшний ΠΊΠ»ΡŽΡ‡ `author` ссылаСтся Π½Π° модСль `Author`, Π° составной ΠΊΠ»ΡŽΡ‡ состоит ΠΈΠ· `author` ΠΈ `book_id`.

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

НадСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ составныС ΠΊΠ»ΡŽΡ‡ΠΈ Π² Django. Π£Π΄Π°Ρ‡ΠΈ Π² ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Django ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ!

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

#9. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ связСй ΠΌΠ΅ΠΆΠ΄Ρƒ модСлями Ρ‡Π΅Ρ€Π΅Π· класс ForeignKey | Django ΡƒΡ€ΠΎΠΊΠΈ

Django Foreign Key оптимизация запросов Π² Π‘Π”

61 БозданиС записСй в кодС с полями ForeignKey и Manytomany

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

yes no django: Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°

πŸ’» Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ составной ΠΊΠ»ΡŽΡ‡ Π² Django для эффСктивного взаимодСйствия с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

πŸ”Ž Django Ρ„ΠΎΡ€ΠΌΠ° Π²Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄Π΅Π»ΠΈ: руководство ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования

🐍 ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Django: созданиС Π²Π΅Π±-прилоТСния

Чистка поля Ρ„ΠΎΡ€ΠΌΡ‹ Django: ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ руководство