summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/topics/serialization.txt33
1 files changed, 24 insertions, 9 deletions
diff --git a/docs/topics/serialization.txt b/docs/topics/serialization.txt
index b81a552ff9..f95db92c16 100644
--- a/docs/topics/serialization.txt
+++ b/docs/topics/serialization.txt
@@ -387,7 +387,12 @@ Consider the following two models::
birthdate = models.DateField()
class Meta:
- unique_together = [['first_name', 'last_name']]
+ constraints = [
+ models.UniqueConstraint(
+ fields=["first_name", "last_name"],
+ name="unique_first_last_name",
+ ),
+ ]
class Book(models.Model):
name = models.CharField(max_length=100)
@@ -431,7 +436,12 @@ name::
objects = PersonManager()
class Meta:
- unique_together = [['first_name', 'last_name']]
+ constraints = [
+ models.UniqueConstraint(
+ fields=["first_name", "last_name"],
+ name="unique_first_last_name",
+ ),
+ ]
Now books can use that natural key to refer to ``Person`` objects::
@@ -454,12 +464,12 @@ into the primary key of an actual ``Person`` object.
Whatever fields you use for a natural key must be able to uniquely
identify an object. This will usually mean that your model will
- have a uniqueness clause (either unique=True on a single field, or
- ``unique_together`` over multiple fields) for the field or fields
- in your natural key. However, uniqueness doesn't need to be
- enforced at the database level. If you are certain that a set of
- fields will be effectively unique, you can still use those fields
- as a natural key.
+ have a uniqueness clause (either ``unique=True`` on a single field, or a
+ ``UniqueConstraint`` or ``unique_together`` over multiple fields) for the
+ field or fields in your natural key. However, uniqueness doesn't need to be
+ enforced at the database level. If you are certain that a set of fields
+ will be effectively unique, you can still use those fields as a natural
+ key.
Deserialization of objects with no primary key will always check whether the
model's manager has a ``get_by_natural_key()`` method and if so, use it to
@@ -479,7 +489,12 @@ Firstly, you need to add another method -- this time to the model itself::
objects = PersonManager()
class Meta:
- unique_together = [['first_name', 'last_name']]
+ constraints = [
+ models.UniqueConstraint(
+ fields=["first_name", "last_name"],
+ name="unique_first_last_name",
+ ),
+ ]
def natural_key(self):
return (self.first_name, self.last_name)