django-models - Django:自动多对多字段中的 UUID
问题描述
我想将 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() 来创建关系”。此外,不是“干”。
我想使用 add、create 和 set ,我喜欢 ManyToMany 字段的“DRY”功能。我也想使用 UUID 作为 id。
我为 ManyToMany 寻找一个参数来传递自动创建的“id”字段的定义,但没有。
我是否遗漏了什么,或者这是 Django 对 UUID 作为主键的支持的限制?
解决方案
推荐阅读
- sql - SQL 计算分数匹配文本
- python - 没有属性替换为 csv 文件字符串
- python - 从另一个 tkinter 文件作为模块打开 tkinter 文件
- python - 从 configparser 加入类似的部分
- bash - 如何通过 bash 脚本为目录中的单个文件创建文件夹?
- python - 在 Google Colab 中一分钟后 Stylegan2 TensorFlow 训练中断
- html - USGA - GHIN 2nd Page Information - 在 XML 登录后从第二个网页获取信息
- python - Pandas:如何获取日期之间的差异并将它们添加到新的数据框中?
- javascript - 用 JavaScript 中的重复键解析 JSON
- sas - 用SAS中的前一个按组替换行值