因此我定義了一個模型Language
。我需要跟蹤創建語言對象的人。我也不需要同一種語言的多個實例。出於這個原因,我希望能夠檢查用戶是否嘗試創建語言時是否已經存在語言。如果它存在,那麼我會告訴用戶他們可以使用已經存在的那個。如果不是,他們可以創建它。我正在使用自定義User
模型。如何檢查模型的實例是否已經存在於數據庫中
USERS = get_user_model().objects.all()
from random import choice
class Language(models.Model):
language = models.CharField(max_length=25, unique=True)
creator = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
def __str__(self):
return self.language
def get_absolute_url(self):
return reverse('chinemerem:language_index')
def save(self, *args, **kwargs):
self.language = self.language.upper()
super(Language, self).save(*args, **kwargs)
我可以在django
shell
創建try/except
Language
情況如下圖所示。
try:
language, exists = Language.objects.get_or_create(creator=choice(USERS),
language='german')
except IntegrityError:
pass
但django admin
拋出IntegrityError
當我嘗試創建通過Django管理語言實例。
我的問題:如何在模型中實現類似try/except
塊的內容,以檢查用戶是否嘗試創建一個語言時是否已經存在語言?
我已經做了很多搜索,並且遇到了signals pre_save,我猜想這可能會有幫助。但django文檔通過示例的方式很少。
任何幫助,將不勝感激。
製作模型管理器並定義一個管理器方法,檢查是否存在匹配的語言。在這種情況下,您始終需要使用管理器方法進行保存 –
不相關,但不應將創建查詢集作爲模塊級變量 - 最終將生成陳舊數據 –
[如何處理]匹配查詢的可能重複存在「當獲取對象](https://stackoverflow.com/questions/33119507/how-to-handle-matching-query-does-not-exist-when-getting-an-object) – Sayse