我想在Django的2个字段中创建一个主键。
字段位于
之下- current Time
- userId
我该怎么做?
Time + userid {PK } [ Current Time + userid]
谢谢!
答案 0 :(得分:13)
大多数情况下,您实际上并不需要使用多列密钥作为主键。
Django使用代理键运行得最好 - 也就是说,它会自动定义一个名为id
的自动增量字段,并将其设置为主键。这几乎适用于所有用途。
如果您需要跨两个或多个字段对模型强制实施唯一约束,则可以使用内部unique_together
类中的Meta
设置。
答案 1 :(得分:6)
它没有内置到Django中(请参阅#373),但请参阅http://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys的底部进行讨论。为了后代,我复制了“替代方法”部分。
替代方法
notnotpeter:目前,你可以“假装” 它通过声明其中一个键 Django中的主要内容并添加了一个唯一的 对模型的约束。 (需要更多 信息...例子?)
mjm:这只适用于有 非复合唯一键,如果我使用 了解这里提出的建议。 因此,它可以作为一种方式 挤压自然拥有的设计 CKs进入Django,但没用 用于处理现有架构 只有CK。
djansoft:可以使用 独特在一起。
东武:你不能只使用一把钥匙。一个 用例说明:a NamespacedTag?用CK制成的模型 命名空间和名称。首要的 key不能只是命名空间或 只是名字,因为那将是 暧昧。唯一的解决方案(和我 不喜欢它,因为它是不好的建模 并强制数据库访问 在柜台上序列化)是使用一个 下拉列表AutoField?
toszter:叫我坚果,但为什么不呢 将任意数量的列声明为 模型中的主键,哪个 django然后用来创造一个“隐藏的” pk_composite列只是一个哈希 行中的三个pk值? 当你在pk上查找时,你 假设整个组合 值是主键,没有 或多或少。所以当你抬头看 根据需要的价值观 创建完整的pk_composite,哈希 总是计算和哈希 算法是公开的,可以用掉 URL,db中的查询字符串 查找,几乎任何地方。 在我看来似乎很简单 然后我再也不会变得伟大 详情请点击这里。
话虽这么说,我会在桌面上创建一个ID并将其作为主键。然后在user_id +时间戳上添加唯一约束。
答案 2 :(得分:2)
如果密钥必须是单列:
id被添加为“开箱即用”(variable.id),并且对于当前时间添加
from django.db import models
date = models.DateTimeField( auto_now_add=True)
在yourapp / models.py
中所以你有2个值,你可以用你想要的任何形状制作你的钥匙。
如果您想要多列密钥,请阅读其他答案。希望能帮到你。