Поле UUIDField
Поле UUIDField в Django предназначено для хранения UUID (Universally Unique Identifier) - 128-битных уникальных идентификаторов. Это поле автоматически генерирует уникальные значения, что делает его идеальным выбором для первичных ключей или полей, требующих глобальной уникальности. По умолчанию UUIDField использует версию 4 UUID, которая генерируется на основе случайных чисел.
При создании модели с UUIDField можно указать параметр default со значением uuid.uuid4 для автоматической генерации UUID при создании записи. Также поле поддерживает параметр primary_key, позволяющий использовать UUID в качестве первичного ключа вместо стандартного автоинкрементируемого целочисленного поля.
Синтаксис
from django.db import models
import uuid
class MyModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
uuid_field = models.UUIDField(default=uuid.uuid4, unique=True)
Пример
Давайте создадим модель для хранения пользователей с уникальным идентификатором:
from django.db import models
import uuid
class UserProfile(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=100)
email = models.EmailField(unique=True)
def __str__(self):
return self.name
Теперь создадим несколько пользователей и посмотрим на их идентификаторы:
from myapp.models import UserProfile
user1 = UserProfile.objects.create(name="John Doe", email="john@example.com")
user2 = UserProfile.objects.create(name="Jane Smith", email="jane@example.com")
print(user1.id)
print(user2.id)
Результат выполнения кода:
"3f2504e0-4f89-41d3-9a0c-0305e82c3301"
"c3f7b0a0-8b2d-4a5e-8f3c-1b2d3e4f5a6b"
Пример
Используем UUIDField в качестве внешнего ключа для связи с другой моделью:
from django.db import models
import uuid
class Category(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Article(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=200)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.title
Создадим категорию и статью, чтобы увидеть, как работает связь:
from myapp.models import Category, Article
category = Category.objects.create(name="Technology")
article = Article.objects.create(
title="Django UUID Field Guide",
category=category
)
print(f"Category ID: {category.id}")
print(f"Article ID: {article.id}")
print(f"Article Category ID: {article.category.id}")
Результат выполнения кода:
"Category ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890"
"Article ID: b2c3d4e5-f6a7-8901-bcde-f234567890ab"
"Article Category ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Пример
Фильтрация записей по UUID полю с использованием методов QuerySet:
from myapp.models import Article
import uuid
# Фильтрация по точному совпадению UUID
specific_uuid = uuid.UUID("b2c3d4e5-f6a7-8901-bcde-f234567890ab")
article = Article.objects.get(id=specific_uuid)
print(article.title)
# Фильтрация по списку UUID
uuid_list = [
uuid.UUID("b2c3d4e5-f6a7-8901-bcde-f234567890ab"),
uuid.UUID("c3d4e5f6-a7b8-9012-cdef-34567890abcd")
]
articles = Article.objects.filter(id__in=uuid_list)
for article in articles:
print(article.title)
Результат выполнения кода:
"Django UUID Field Guide"
"Article 1"
"Article 2"
Смотрите также
-
поле
CharField,
которое используется для хранения строковых данных -
поле
IntegerField,
которое хранит целочисленные значения -
поле
BooleanField,
которое хранит логические значения (True/False) -
поле
DateTimeField,
которое хранит дату и время