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

Атрибут pk

Атрибут pk является стандартным способом получения и установки значения первичного ключа для любой модели Django. Он автоматически ссылается на поле, объявленное как первичный ключ (по умолчанию это поле id), и обеспечивает единый интерфейс для работы с идентификаторами объектов, независимо от того, какое поле используется в качестве первичного ключа. Атрибут доступен как для существующих объектов, так и для новых экземпляров модели.

Синтаксис

# Получение значения первичного ключа object.pk # Установка значения первичного ключа object.pk = new_value

Пример

Рассмотрим простую модель Article и работу с атрибутом pk для существующей записи:

from myapp.models import Article # Получаем статью с id=1 article = Article.objects.get(id=1) # Получаем значение первичного ключа через pk print(f"ID статьи: {article.pk}") print(f"ID через id: {article.id}") # Меняем значение первичного ключа article.pk = 10 print(f"Новый ID: {article.pk}")

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

"ID статьи: 1" "ID через id: 1" "Новый ID: 10"

Пример

Продемонстрируем использование pk для создания нового объекта и проверки его состояния:

from myapp.models import Article # Создаем новую статью new_article = Article(title="New Article", status="draft") # Проверяем pk до сохранения print(f"До сохранения: {new_article.pk}") # Сохраняем объект new_article.save() # Проверяем pk после сохранения print(f"После сохранения: {new_article.pk}")

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

"До сохранения: None" "После сохранения: 5"

Пример

Использование pk для фильтрации QuerySet и получения объектов:

from myapp.models import Article # Получаем статьи по значению pk article = Article.objects.get(pk=3) # Фильтруем статьи по диапазону pk articles = Article.objects.filter(pk__gte=2, pk__lte=5) for art in articles: print(f"Статья {art.pk}: {art.title}") # Получаем список pk всех статей pk_list = Article.objects.values_list('pk', flat=True) print(f"Все pk: {list(pk_list)}")

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

"Статья 2: Django Basics" "Статья 3: Advanced Models" "Статья 4: QuerySet Guide" "Статья 5: ORM Tips" "Все pk: [1, 2, 3, 4, 5, 6, 7]"

Пример

Работа с pk при использовании кастомного первичного ключа:

from django.db import models class Product(models.Model): sku = models.CharField(max_length=20, primary_key=True) name = models.CharField(max_length=100) price = models.DecimalField(max_digits=10, decimal_places=2) # Создаем продукт с кастомным ключом product = Product(sku="PROD-001", name="Laptop", price=999.99) product.save() # Используем pk для доступа к кастомному ключу print(f"Product PK: {product.pk}") print(f"Product SKU: {product.sku}") # Поиск по pk found = Product.objects.get(pk="PROD-001") print(f"Found: {found.name}")

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

"Product PK: PROD-001" "Product SKU: PROD-001" "Found: Laptop"

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

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