在Django中使用2个字段制作主键?

时间:2011-02-02 07:53:48

标签: database django

我想在Django的2个字段中创建一个主键。

字段位于

之下
- current Time 
- userId

我该怎么做?

Time + userid {PK }  [ Current Time + userid]

谢谢!

3 个答案:

答案 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个值,你可以用你想要的任何形状制作你的钥匙。

如果您想要多列密钥,请阅读其他答案。希望能帮到你。