1
0
mirror of https://github.com/django/django.git synced 2025-05-23 07:16:29 +00:00

Refs #36070 -- Referred to pk as an attribute when a composite primary key is defined.

This is to avoid confusion that a field is often associated with having
a single associated database column.
This commit is contained in:
Jacob Walls 2025-01-14 16:43:49 +01:00 committed by Sarah Boyce
parent b721f12760
commit f054045973
4 changed files with 16 additions and 11 deletions

View File

@ -722,8 +722,8 @@ isn't defined.
A virtual field used for defining a composite primary key. A virtual field used for defining a composite primary key.
This field must be defined as the model's ``pk`` field. If present, Django will This field must be defined as the model's ``pk`` attribute. If present, Django
create the underlying model table with a composite primary key. will create the underlying model table with a composite primary key.
The ``*field_names`` argument is a list of positional field names that compose The ``*field_names`` argument is a list of positional field names that compose
the primary key. the primary key.

View File

@ -468,9 +468,14 @@ The ``pk`` property
Regardless of whether you define a primary key field yourself, or let Django Regardless of whether you define a primary key field yourself, or let Django
supply one for you, each model will have a property called ``pk``. It behaves supply one for you, each model will have a property called ``pk``. It behaves
like a normal attribute on the model, but is actually an alias for whichever like a normal attribute on the model, but is actually an alias for whichever
attribute is the primary key field for the model. You can read and set this field or fields compose the primary key for the model. You can read and set
value, just as you would for any other attribute, and it will update the this value, just as you would for any other attribute, and it will update the
correct field in the model. correct fields in the model.
.. versionchanged:: 5.2
Support for the primary key to be composed of multiple fields was added via
``CompositePrimaryKey``.
Explicitly specifying auto-primary-key values Explicitly specifying auto-primary-key values
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -57,8 +57,8 @@ Composite Primary Keys
The new :class:`django.db.models.CompositePrimaryKey` allows tables to be The new :class:`django.db.models.CompositePrimaryKey` allows tables to be
created with a primary key consisting of multiple fields. created with a primary key consisting of multiple fields.
To use a composite primary key, when creating a model set the ``pk`` field to To use a composite primary key, when defining a model set the ``pk`` attribute
be a ``CompositePrimaryKey``:: to be a ``CompositePrimaryKey``::
from django.db import models from django.db import models

View File

@ -11,8 +11,8 @@ In most cases, a single primary key should suffice. In database design,
however, defining a primary key consisting of multiple fields is sometimes however, defining a primary key consisting of multiple fields is sometimes
necessary. necessary.
To use a composite primary key, when creating a model set the ``pk`` field to To use a composite primary key, when defining a model set the ``pk`` attribute
be a :class:`.CompositePrimaryKey`:: to be a :class:`.CompositePrimaryKey`::
class Product(models.Model): class Product(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
@ -41,8 +41,8 @@ A composite primary key is represented by a ``tuple``:
>>> item.pk >>> item.pk
(1, "A755H") (1, "A755H")
You can assign a ``tuple`` to a composite primary key. This sets the associated You can assign a ``tuple`` to the :attr:`~django.db.models.Model.pk` attribute.
field values. This sets the associated field values:
.. code-block:: pycon .. code-block:: pycon