簡體   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