postgresql Django表-用两个主键替换ID(或类似的东西)

dsf9zpds  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(128)

我有一个用Django制作的PostgreSQL表,看起来像这样

id         |  user_id    | data
  ++++++++++++++++++++++++++++++++++++
  1119582010 |  1927472901 | foo 
  0318715789 |  2294819294 | bar
  3927284920 |  3281847282 | baz
  1610986385 |  3281847282 | qux
  1948381983 |  2069385930 | foo
  1610986485 |  3103827482 | corge

字符串
该模型看起来大约像这样

class Data(Model):
   user = ForeignKey(User, delete=CASCADE)
   data = CharField(max_length=32)


两个不同的行可以具有相同的user_id或相同的数据,但不能有两个行同时共享相同的user_id和数据。
因此,既然每一行都是唯一的,我是否可以取消自动生成的id列?这会占用很多空间。
谢谢

zd287kbt

zd287kbt1#

您可以使用**UniqueConstraint**[Django-doc]作为唯一性约束(可以跨越多个列)。
这看起来像:

from django.conf import settings
from django.db import models

class MyModel(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    data = models.CharField(max_length=32)

    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=('user', 'data'), name='unique_data_per_user'
            )
        ]

字符串
有没有什么方法可以去掉自动生成的id列?它占用了很多空间。

,这已经被多次请求,但每次都被拒绝。原因可能不是数据库;而是如何引用URL路径和<select>小部件中的对象,以及Django的“生态系统”已经建立了一个假设,即主键引用 * 单个 * 唯一字段。
备注:通常使用**settings.AUTH_USER_MODEL[Django-doc]引用用户模型比直接使用User**模型[Django-doc]更好。有关更多信息,您可以查看文档的 * 引用User模型 * 部分。

相关问题