Django:自动ManyToMany字段中的UUID

时间:2018-12-21 14:26:56

标签: django-models

我想使用UUID作为数据库ID,而不是自动递增整数。我了解这可以通过重写Model类中的id来完成,例如:

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字段生成的表使用的是自动递增的ID,而不是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()创建关系”。另外,不要“ DRY”。

我想使用add,create和set,并且我喜欢ManyToMany字段的“ DRY”功能。我也想使用UUID作为ID。

我在ManyToMany中寻找了一个参数,以传递自动创建的“ id”字段的定义,但是没有一个。

我是否缺少某些内容,或者这是Django支持将UUID作为主键的限制吗?

0 个答案:

没有答案