РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
30 of 818 menu

CompositePrimaryKey

Поле CompositePrimaryKey предназначено для создания составного первичного ключа, который состоит из нескольких полей модели. Это поле добавляется в атрибут Meta модели и позволяет комбинировать несколько полей для уникальной идентификации каждой записи. В отличие от стандартного поля AutoField, автоматически создающего числовой идентификатор, составной ключ дает возможность использовать естественные бизнес-ключи.

Синтаксис

from django.db import models class MyModel(models.Model): field_one = models.IntegerField() field_two = models.CharField(max_length=100) class Meta: composite_primary_key = [field_one, field_two]

Пример

Допустим, у нас есть модель 'Order' с полями 'order_id' и 'product_code'. Мы хотим, чтобы эти два поля вместе образовывали первичный ключ:

from django.db import models class Order(models.Model): order_id = models.IntegerField() product_code = models.CharField(max_length=10) class Meta: composite_primary_key = [order_id, product_code]

Теперь каждая запись в таблице 'Order' будет уникально идентифицироваться комбинацией 'order_id' и 'product_code'. В базе данных для этих полей будет создан составной первичный ключ.

Пример

При использовании составного первичного ключа доступ к объекту модели осуществляется через кортеж значений:

from myapp.models import Order # Создание объекта с составным ключом order = Order.objects.create(order_id=1001, product_code='A123') # Получение объекта по составному ключу res = Order.objects.get(pk=(1001, 'A123')) print(res.product_code)

Результат выполнения кода:

"A123"

Пример

Составной первичный ключ также поддерживает связи через внешние ключи. Например, модель 'OrderItem' может ссылаться на 'Order' через его составной ключ:

from django.db import models class OrderItem(models.Model): order = models.ForeignKey( 'Order', to_field=('order_id', 'product_code'), on_delete=models.CASCADE, ) quantity = models.IntegerField() price = models.DecimalField(max_digits=10, decimal_places=2) class Meta: composite_primary_key = [order, quantity]

В этом примере внешний ключ 'order' ссылается на составной первичный ключ модели 'Order', что позволяет правильно организовать связь между таблицами.

Смотрите также

  • поле AutoField,
    которое создает автоматически увеличивающийся первичный ключ
  • поле IntegerField,
    которое используется для хранения целочисленных значений
  • поле CharField,
    которое предназначено для хранения строковых значений
  • класс Meta,
    который содержит дополнительные настройки модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить