我想使用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作为主键的限制吗?