2012-01-06 42 views
3

我想檢查該對象是否存在於數據庫中,如果它不存在,則將其添加到數據庫中。 我想:Django對象存在

if not MyModel.objects().get(surname='foo'): 
    management.call_command('loaddata', 'Bootstrap_data', verbosity=0)#adds this object from fixtures 

但是我從數據庫(sqlite3的)查詢錯誤。如何解決這種對象驗證方式?

的錯誤是:

DoesNotExist at/
MyModel matching query does not exist. 

正是因爲有這個姓在數據庫中沒有對象。

+0

什麼樣的錯誤? – 2012-01-06 17:39:10

回答

4

通常你會使用get_or_create

model_instance = MyModel.objects.get_or_create(surname='foo') 

你真不該使用management.call_command這樣的事情。與您的代碼

try: 
    MyModel.objects.get(surname='foo') 
except MyModel.DoesNotExist: 
     management.call_command(....) 

OR

if not MyModel.objects.filter(surname='foo').exists(): 
     management.call_command(....) 
+0

如果我想通過加載裝置來創建它,它會工作嗎? – Feanor 2012-01-06 17:44:00

+0

在他的情況下沒有用;他想從燈具加載,而不是代碼。 – 2012-01-06 17:46:39

+0

剛剛更新了我的答案,如果你這樣做是因爲一些與燈具相關的原因:) – 2012-01-06 17:47:13

1
if not MyModel.objects.filter(surname='foo').exists() 

RTFriendlyM

1

問題:

這就是說,如果我誤解,你有一個很好的理由,試試這個是MyModel.objects.get會增加DoesNotExist,請嘗試使用exists改爲:

if not MyModel.objects.filter(surname='foo').exists(): 
    management.call_command('loaddata', 'Bootstrap_data', verbosity=0)