Django Python unique = True Expression

时间:2014-10-11 09:33:52

标签: python django

我想在我的数据库中保存条目,以便我以后可以删除它们。为了识别它们,我将key属性放在Entry的{​​{1}}中,如下所示:

models.py

每次启动服务器时,我都会找到class Entry(models.Model): name = models.CharField(max_length=200) key = models.IntegerField(unique=True,default=0) 中最大的密钥。

每次我在启动服务器后创建第一个新的Entry.objects.all()时,我想要从最初找到的Entry,将其增加1,然后将其设置为{{1我的新key。对于每个后续的key,我将只取前一个元素的Entry,将其增加1和。将其设置为我的新Entry

key

然而,在我这样做之前,我想知道Django认为什么是独特的。例如,如果我最初使用键keyEntry1添加了三个条目,然后使用键2删除最后一个元素。如果我然后重新启动服务器,我会找到最大的3 3,我要添加的下一个key2 2 + 1等于{{ 1}}再次。

Entry是唯一的吗? 之前输入但我删除了该元素吗?那么唯一性是由我过去输入的内容决定的,还是仅仅取决于数据库中当前的元素?

此外,Django会跟踪我添加的key的所有实例,以便以某种方式知道我是否添加了3 key Entry前?

请注意,我的数据存储在名为Entry

的文件中

谢谢。

3 个答案:

答案 0 :(得分:2)

好像你正在寻找已经存在的东西;默认情况下,模型有一个id字段,它是唯一且单调的(较新的条目具有更大的id)。

答案 1 :(得分:0)

尝试在关键字段中添加primary_key=True

答案 2 :(得分:0)

这些都与Django完全没有任何关系。这是纯数据库的东西:在你的SQLite案例中,唯一的约束由数据库专门处理,尽管其他数据库的功能也完全相同。

当然,唯一约束只考虑实际存在的行:否则会是什么意思?

您的提案还需要注意其他事项。特别是,存在竞争条件的问题:如果您执行查询以获取最大键值,然后使用键+ 1创建新行,则在同时在密钥处添加自己的行时会冒另一个用户的风险+1。正如Iris和ryanageles建议的那样,使用已经自动定义为id字段的内置主键更好。