Django: UUID в автоматических полях ManyToMany - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу использовать 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 в качестве первичного ключа?

...