2013-07-27 73 views
2

當我做「object_name.objects.get(id = 1)」我得到錯誤。此前,當id = 1時,我得到了這個錯誤,但是當id = 2時它返回了對象。然後我刪除了我所做的所有條目,希望它會從id = 1開始,但現在它會發生錯誤。DoesNotExist:對象匹配查詢不存在

有人可以解釋爲什麼會發生這種情況,我該怎麼辦?

>>> from course.models import Course, Content 

>>> Course.objects.get(id=1) 

Traceback (most recent call last): 

    File "<console>", line 1, in <module> 

    File "/home/vagrant/edu-venv/local/lib/python2.7/site-packages/django/db/models /manager.py", line 143, in get 
    return self.get_query_set().get(*args, **kwargs) 

    File "/home/vagrant/edu-venv/local/lib/python2.7/site-packages/django/db/models /query.py", line 389, in get 
    (self.model._meta.object_name, kwargs)) 

DoesNotExist: Course matching query does not exist. Lookup parameters were {'id': 1} 

此外object_name.object.all()給所有我已經進入

>>> Course.objects.all() 
[<Course: JAVA>, <Course: HTML5>] 
+0

這很自然,你必須做的是應用'try'和'except',該函數處理那個問題 – catherine

+0

請閱讀:https://docs.djangoproject.com/en/dev/topics/db/queries/ #檢索單個對象並得到 –

+0

在shell中執行此操作:'Course.objects.values_list('pk',flat = True)',並查看爲兩個對象生成的ID。你會知道爲什麼'id = 1'失敗 – karthikr

回答

1

數據庫遞增每次創建對象時的主鍵的事情。如果使用id=1id=2創建對象,則即使刪除了現有對象,下一個對象也將總是有id=3

+0

那麼我應該怎麼做才能從id = 1開始 – user2539745

+0

如果你願意失去所有現有的數據,你可以刪除數據庫表並重新創建它以從零開始序列。我建議你不要擔心。對象主鍵列表中是否存在「空白」並不重要。 – Alasdair

+0

我應該如何放置表格我正在使用vagrant和虛擬框。我做了./manage.py sqlclear當然它給了'BEGIN; DROP TABLE「course_course」DROP TABLE「course_content」COMMIT;'好了嗎 ??? – user2539745

相關問題