我想在我的数据库中保存条目,以便我以后可以删除它们。为了识别它们,我将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认为什么是独特的。例如,如果我最初使用键key
,Entry
和1
添加了三个条目,然后使用键2
删除最后一个元素。如果我然后重新启动服务器,我会找到最大的3
3
,我要添加的下一个key
将2
2 + 1等于{{ 1}}再次。
这Entry
是唯一的吗?
之前输入但我删除了该元素吗?那么唯一性是由我过去输入的内容决定的,还是仅仅取决于数据库中当前的元素?
此外,Django会跟踪我添加的key
的所有实例,以便以某种方式知道我是否添加了3
key
Entry
前?
请注意,我的数据存储在名为Entry
谢谢。
答案 0 :(得分:2)
好像你正在寻找已经存在的东西;默认情况下,模型有一个id字段,它是唯一且单调的(较新的条目具有更大的id)。
答案 1 :(得分:0)
尝试在关键字段中添加primary_key=True
。
答案 2 :(得分:0)
这些都与Django完全没有任何关系。这是纯数据库的东西:在你的SQLite案例中,唯一的约束由数据库专门处理,尽管其他数据库的功能也完全相同。
当然,唯一约束只考虑实际存在的行:否则会是什么意思?
您的提案还需要注意其他事项。特别是,存在竞争条件的问题:如果您执行查询以获取最大键值,然后使用键+ 1创建新行,则在同时在密钥处添加自己的行时会冒另一个用户的风险+1。正如Iris和ryanageles建议的那样,使用已经自动定义为id
字段的内置主键更好。