πŸ”₯Django Model Meta: ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌ основы ΠΈ тонкости πŸ”₯

Для понимания ΠΌΠΎΠ΄Π΅Π»ΠΈ Django Meta, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°: verbose_name ΠΈ ordering.

verbose_name позволяСт Π·Π°Π΄Π°Ρ‚ΡŒ понятноС ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΠ΅ имя ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² административном интСрфСйсС.


from django.db import models

class Vehicle(models.Model):
    name = models.CharField(max_length=100, verbose_name="НазваниС транспорта")

ordering позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ порядок сортировки записСй Π² запросах ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ.


from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    
    class Meta:
        ordering = ['title']

Π­Ρ‚ΠΎ всСго лишь нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Meta. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ unique_together для опрСдСлСния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΠ»ΠΈ verbose_name_plural для задания мноТСствСнного числа ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ вмСсто автоматичСского образования.

НадСюсь, это ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΎ Π½Π° ваш вопрос ΠΎ Django Model Meta!

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

Π”Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ объяснСниС Django Model Meta

Π’ Django Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ понятий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Одним ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Π²Π°ΠΆΠ½Ρ‹Ρ… понятий Π² Django являСтся Model Meta, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для опрСдСлСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Model Meta?

Model Meta - это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Django. ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½ΠΎ Π½Π΅ ΠΎΡ‚Π½ΠΎΡΡΡ‰ΡƒΡŽΡΡ нСпосрСдствСнно ΠΊ полям ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, порядок сортировки ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ настройки. Model Meta опрСдСляСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΌΠΎΠ΄Π΅Π»ΠΈ с использованиСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° class Meta.


    from django.db import models

    class MyModel(models.Model):
        # Поля модСли
        field1 = models.CharField(max_length=100)
        field2 = models.IntegerField()

        class Meta:
            # ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ
            db_table = 'my_table'
            ordering = ['field1']
  

ВозмоТности, прСдоставляСмыС Model Meta

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· возмоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ:

  • db_table: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, связанной с модСлью. Если Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Django автоматичСски создаст имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
  • ordering: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ порядок сортировки записСй ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запросов. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ списком ΠΏΠΎΠ»Π΅ΠΉ с прСфиксами "-" (для сортировки Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС) ΠΈΠ»ΠΈ Π±Π΅Π· прСфиксов (для сортировки Π² прямом порядкС).
  • verbose_name ΠΈ verbose_name_plural: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎ-Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ для отобраТСния Π² административном интСрфСйсС Django.
  • get_latest_by: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ»Π΅, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСдний экзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ.
  • indexes: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ индСксы Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ созданы для ΠΌΠΎΠ΄Π΅Π»ΠΈ.
  • unique_together: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….
  • permissions: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, связанныС с модСлью, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² систСмС управлСния доступом Django.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Model Meta

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Model Meta для Π±ΠΎΠ»Π΅Π΅ ясного понимания. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ модСль Product с нСсколькими полями:


    from django.db import models

    class Product(models.Model):
        name = models.CharField(max_length=100)
        price = models.DecimalField(max_digits=8, decimal_places=2)
        quantity = models.IntegerField()
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Model Meta для этой ΠΌΠΎΠ΄Π΅Π»ΠΈ с использованиСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· прСдоставлСнных возмоТностСй:


    class Product(models.Model):
        name = models.CharField(max_length=100)
        price = models.DecimalField(max_digits=8, decimal_places=2)
        quantity = models.IntegerField()

        class Meta:
            db_table = 'products'
            verbose_name_plural = 'Π’ΠΎΠ²Π°Ρ€Ρ‹'
            get_latest_by = 'price'
  

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅:

  • db_table устанавливаСт имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° "products".
  • verbose_name_plural устанавливаСт Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎ-Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ΅ имя ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° "Π’ΠΎΠ²Π°Ρ€Ρ‹".
  • get_latest_by ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ послСдний экзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π½Π° основС поля "price".

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

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

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

Django Full Course - 1.7 - Model meta options

Introduction to Class Meta in Django Models

#36. ΠœΠ΅Ρ‚Π°ΠΊΠ»Π°ΡΡΡ‹ Π² API ORM Django | ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python

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

πŸ”₯Django Model Meta: ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌ основы ΠΈ тонкости πŸ”₯

πŸ”— Django созданиС ссылок: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ