Как сделать длинный id для поста в Django?

В Django по умолчанию используются целочисленные идентификаторы (ID) для моделей. Однако, если вам нужен длинный идентификатор для поста, вы можете воспользоваться уникальными случайными строками, такими как UUID (Universally Unique Identifier) или Slug.

1. UUID (Универсальный уникальный идентификатор):
UUID является уникальной 128-битной строкой в формате символов, которая используется для идентификации объектов в системе. Django имеет встроенную поддержку UUID в модуле uuid.

Прежде всего, нужно импортировать модуль uuid:

import uuid

Затем, вы можете использовать поле models.UUIDField для хранения идентификатора в модели Django:

from django.db import models

class Post(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    # другие поля модели

Это создаст поле id, которое будет автоматически заполняться уникальным идентификатором типа UUID при создании нового объекта модели.

2. Slug (Человекочитаемая ссылка):
Slug - это строка, которая обычно используется в URL-адресах и содержит только буквы, цифры, дефисы и/или подчеркивания. Slug может быть основан на имени или заголовке поста.

Django имеет встроенный slugify фильтр, который заменяет пробелы, спецсимволы и знаки препинания в строке на дефисы. Мы также можем использовать этот фильтр для создания слага:

from django.utils.text import slugify

class Post(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    # другие поля модели

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super().save(*args, **kwargs)

В функции save() модели Post, мы используем slugify() для создания слага из заголовка поста и сохраняем его в поле slug. Если заголовок уникален, то слаг также будет уникален благодаря параметру unique=True поля slug.

Теперь вы можете использовать либо UUID, либо Slug для идентификации постов в Django. Выбор зависит от ваших требований и предпочтений.