繁体   English   中英

Django Python unique =真表达式

[英]Django Python unique=True Expression

我想将条目保存在数据库中,以便以后可以删除它们。 为了识别它们,我将key属性放在models.pyEntry中,如下所示:

class Entry(models.Model):
    name = models.CharField(max_length=200)
    key = models.IntegerField(unique=True,default=0)

每次启动服务器时,我都会在Entry.objects.all()找到最大的密钥。

每次启动服务器后,每次创建第一个新Entry ,我都想使用在开始时找到的key ,将其增加1,然后将其设置为新Entrykey 对于随后的每个Entry ,我都将采用上一个元素的key ,将其增加1并添加。 将其设置为新Entrykey

但是,在执行此操作之前,我想知道Django认为什么是独特的。 例如,如果我增加三个条目最初与键123 ,然后我删除与键的最后一个元素3 如果我随后重新启动服务器,我将找到的最大key2 ,而我要添加的下一个Entry将具有key 2 + 1,该key再次等于3

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

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

请注意,我的数据存储在名为db.sqlite3的文件中

谢谢。

似乎您正在寻找已经存在的东西; 模型默认具有唯一且单调的id字段(更新的条目具有更大的id)。

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

这些都与Django无关。 这是纯数据库的东西:唯一的约束仅由数据库(在您的情况下为SQLite)处理,尽管其他DB的功能也完全相同。

当然,唯一约束仅考虑实际存在的行:否则有什么意义?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM