今天我花了數小時弄清楚如何刪除Django中的對象。 現在我已經找到並嘗試了4種不同的網絡方法,只是在使用表單/ POST/GET方法時纔有所不同。 CSRF攻擊與我無關,因爲頁面應該在本地運行。Django對象刪除不起作用
該應用做什麼?到目前爲止,只能在某個項目名稱下上傳文件。這個名字是slugified,並用作一個項目散列文件的關鍵。現在我想也刪除文件(後來整個項目)。
這裏的方法之一:
在.html
:
<a href="{{file.pk}}/delete" class="btn btn-sm" role="button" title="Delete File">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
</a>
此鏈接diplayed的詳細視圖,所以URL看起來已經事端像/文件/彈頭/
然後在urls.py
:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^upload/$', views.file_upload, name ='upload'),
url(r'^upload/(?P<slug>[\w-]+)/$', views.file_upload, name ='upload'),
url(r'^(?P<slug>[\w-]+)/$', views.file_detail, name='detail'),
url(r'^(?P<slug>[\w-]+)/(?P<pk>\d+)/delete$', views.file_delete, name="file_delete"),
]
最後的views.py
:
def file_delete(request, slug=None, pk=None):
instance = get_object_or_404(File, slug=slug, pk=pk)
# instance = File.objects.filter(pk=pk, slug=slug)[0] # the same as above
instance.delete() #does not work
return redirect("index") # or anything, this part is no problem
一切都貫穿沒有任何錯誤,但是當我檢查/管理數據庫,沒有文件已經一去不復返了。它根本不會被刪除。有時,在嘗試幾次後登錄/ admin時,我在登錄屏幕上看到多個「文件成功刪除」消息。但是這些文件仍然在數據庫列表中。
Django Docs告訴我,delete()應該返回某種字典並刪除了多少個對象,例如像這樣:
>>> e.delete()
(1, {'weblog.Entry': 1})
但可以區分它只是說:沒有或返回開始蛞蝓的路徑。
對於任何提示,我都非常感激。我知道至少有一個關於這個stackoverflow的帖子,但不幸的是沒有答案
是[this](http://stackoverflow.com/questions/3124658/django-delete-object)有用嗎? – EbraHim
爲什麼你的標籤沒有file-slug。? – durdenk
@durdenk:有多個文件,共享一個slu。。它用作項目名稱,其中項目可以包含多個文件。在這裏我只想刪除某個文件,而不是整個項目。這就是爲什麼我使用.pk而不是slu 012 – mathiasw24