[英]Django Python unique=True Expression
我想將條目保存在數據庫中,以便以后可以刪除它們。 為了識別它們,我將key
屬性放在models.py
類Entry
中,如下所示:
class Entry(models.Model):
name = models.CharField(max_length=200)
key = models.IntegerField(unique=True,default=0)
每次啟動服務器時,我都會在Entry.objects.all()
找到最大的密鑰。
每次啟動服務器后,每次創建第一個新Entry
,我都想使用在開始時找到的key
,將其增加1,然后將其設置為新Entry
的key
。 對於隨后的每個Entry
,我都將采用上一個元素的key
,將其增加1並添加。 將其設置為新Entry
的key
但是,在執行此操作之前,我想知道Django認為什么是獨特的。 例如,如果我增加三個條目最初與鍵1
, 2
和3
,然后我刪除與鍵的最后一個元素3
。 如果我隨后重新啟動服務器,我將找到的最大key
是2
,而我要添加的下一個Entry
將具有key
2 + 1,該key
再次等於3
。
這把key
唯一嗎? 它是在之前輸入的,但是我刪除了該元素,對嗎? 那么,唯一性是由我過去輸入的內容還是僅取決於數據庫中當前的元素確定的?
另外,Django是否會跟蹤我添加的Entry
的所有實例,以便以某種方式知道我之前是否添加了帶有key
3
的Entry
?
請注意,我的數據存儲在名為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.