2014-01-31 15 views
0

當新來的Django和Python這裏,所以原諒我,如果這是簡單的東西並不存在......Python的Django的 - 相匹配查詢中使用PK

我試圖刪除MyClass類型的對象,但對於一些當我確信該對象事實上存在時,我不斷收到匹配查詢的原因不存在錯誤。

我寫了一個刪除方法,看起來像這樣:

def delete(self, request, format=None, *args, **kwargs): 

    identifier = request.DATA.get('identifier', None) 
    my_object = MyObjectClass.objects.get(pk=identifier) 

    if my_object: 
     my_object.delete() 
    return Response(status=status.HTTP_200_OK) 

當我這樣做,我得到的消息MyObjectClass匹配查詢不存在的。

然而,當我運行python manage.py殼,我可以檢索對象是這樣的:

my_object = MyObjectClass.objects.get(pk=1001) 

的作品如預期...所以很明顯無論是存儲在該標識符變量是不正確,儘管我無法弄清楚爲什麼。我的問題:是否需要進行一些類型轉換才能使其發揮作用?還是有人有另一個想法,爲什麼這可能會打破?

謝謝!

+0

說明:你說你已經寫了一個「刪除方法」。你的意思是一個基於Django函數的視圖,是否正確? (而不是重寫模型的刪除方法或東西) – foobarbecue

+0

正確的......上面的代碼執行時,我發送DELETE請求 –

+0

啊等待,這可能是基於類的視圖的刪除方法?當Django添加CBVs時,一切變得如此複雜...... – foobarbecue

回答

0

identifier的值必定是錯誤的。嘗試使用頂部的調試器 - import pdb,然後放入低於identifier = foo的斷點行(pdb.set_trace())。然後運行開發服務器manage.py runserver,當它遇到斷點類型identifier,我敢肯定你會發現它不是1001.如果是這樣,你需要弄清楚你的http請求有什麼問題。

順便說一下,我使用request.GET而不是request.DATA;我不知道這是否有效。

+0

其印刷u'9743',雖然我不確定U來自哪裏。偶然看起來對你來說很熟悉嗎? –

+0

你只是說它是一個Unicode字符串,應該沒關係。 Django在查詢查找時自動進行類型轉換。所以,當你執行'my_object = MyObjectClass.objects.get(pk = 9743)'時,這是否工作? – foobarbecue

+0

它在shell中執行該命令時有效。 –