Вот моя реализация настраиваемого поля:
Код: Выделить всё
import uuid
from django.db import models
class PrefixedUUIDField(models.UUIDField):
def __init__(self, prefix, *args, **kwargs):
self.prefix = prefix
super().__init__(*args, **kwargs)
def from_db_value(self, value, expression, connection):
if value is None:
return value
return f"{self.prefix}_{value}"
def get_prep_value(self, value):
if isinstance(value, str) and value.startswith(f"{self.prefix}_"):
value = value.split(f"{self.prefix}_")[1]
return super().get_prep_value(value)
def to_python(self, value):
if isinstance(value, uuid.UUID):
return f"{self.prefix}_{value.hex}"
if isinstance(value, str) and not value.startswith(f"{self.prefix}_"):
return f"{self.prefix}_{value}"
return value
Код: Выделить всё
class FamilyTree(models.Model):
id = PrefixedUUIDField(prefix="ft", primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=255)
Код: Выделить всё
http://admin.localhost:8000/family_tree/familytree/ft_5F5479ca65374d401d9466d57fc95e4072/change/
Код: Выделить всё
invalid input syntax for type uuid: "ft_5F5479ca65374d401d9466d57fc95e4072"

Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-objects
Мобильная версия