2016-04-21 64 views
0

今天我花了數小時弄清楚如何刪除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的帖子,但不幸的是沒有答案

+0

是[this](http://stackoverflow.com/questions/3124658/django-delete-object)有用嗎? – EbraHim

+0

爲什麼你的標籤沒有file-slug。? – durdenk

+0

@durdenk:有多個文件,共享一個slu。。它用作項目名稱,其中項目可以包含多個文件。在這裏我只想刪除某個文件,而不是整個項目。這就是爲什麼我使用.pk而不是slu 012 – mathiasw24

回答

0

queryset delete method(例如File.objects.filter(...).delete())返回一個元組。

當你delete an instance(例如instance.delete())它返回None

我不確定'當我檢查文件列表時,沒有文件已經消失'。請注意,當您刪除模型實例時,它將從數據庫中刪除該行。如果型號有FileField,它不會自動刪除關聯的文件。

+0

嗨!感謝您的評論,我不知道關於刪除() 不幸的是,從數據庫刪除不起作用。這就是我的文件列表。你有一個想法有什麼可能是錯的? – mathiasw24

+0

您尚未顯示解釋爲什麼'instance.delete()'不起作用的任何代碼。 – Alasdair