Я хочу использовать UUID для идентификаторов базы данных вместо целых автоинкрементов.Я понимаю, что это можно сделать, переопределив идентификатор в классе Model, например:
from django.db import models
class Publication(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=30)
class Article(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
headline = models.CharField(max_length=100)
publications = models.ManyToManyField(Publication)
Но проблема все еще существует.Автоматически сгенерированная таблица для поля ManyToMany использует автоматически увеличенный идентификатор, а не UUID.
Конечно, это можно решить, определив сквозную таблицу следующим образом:
...
class Article(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
headline = models.CharField(max_length=100)
publications = models.ManyToManyField(Publication, through="ArticlePublication")
class ArticlePublication(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
article = models.ForeignKey(Article, on_delete=models.CASCADE)
publication = models.ForeignKey(Publication, on_delete=models.CASCADE)
Но, согласно документации Django, когда вы используете таблицу «сквозной»: «В отличие от обычных полей« многие ко многим », вы не можете использовать add (), create () или set () для создания отношений».Кроме того, не «СУХОЙ».
Я хочу использовать добавление, создание и установку, и мне нравится функция «СУХОЙ» поля ManyToMany.Я также хочу использовать идентификаторы UUID в качестве идентификаторов.
Я искал параметр ManyToMany для передачи определения автоматически созданного поля "id", но его нет.
AmЯ что-то упустил, или это ограничение поддержки Django UUID в качестве первичного ключа?