Django对象删除不起作用

时间:2016-04-21 16:17:37

标签: python django object

我今天花了好几个小时搞清楚如何删除Django中的对象。 现在我已经在网上找到并尝试了4种不同的方法,只是在使用表单/ POST / GET方法方面有所不同。 CSRF攻击对我来说无关紧要,因为页面应该在本地运行。

该应用程序有什么作用?到目前为止只上传某个项目名称下的文件。这个名称被强制化并用作一个项目的哈希文件的关键。现在我想删除文件(以后的整个项目)。

这是其中一种方法:

.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>

此链接显示在详细视图中,因此网址已经看起来像/ files / SLUG /

然后在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上检查数据库时,没有文件消失。它根本不会被删除。有时,在尝试几次登录/ admin后,我看到多个&#34;文件已成功删除&#34;登录屏幕上的消息。但随后文件仍在数据库列表中。

Django Docs告诉我delete()应该返回某种字典以及删除了多少个对象,例如像这样:

>>> e.delete()
(1, {'weblog.Entry': 1})

但在可能的情况下,它只是说:无或返回以slug开头的路径。

我非常感激任何提示。我知道stackoverflow上至少有一篇关于此的帖子,但遗憾的是没有答案

2 个答案:

答案 0 :(得分:2)

我有一个类似的问题(这就是我发现这个问题的方式),我认为如果您只是在删除的URL末尾添加一个“ /”,它应该可以工作。至少那是与我合作的原因。

...
    url(r'^(?P<slug>[\w-]+)/(?P<pk>\d+)/delete/<<<<$', views.file_delete, name="file_delete"),
    ]

答案 1 :(得分:1)

queryset delete method(例如File.objects.filter(...).delete())会返回一个元组。

当您delete an instance(例如instance.delete())时,它会返回None

我不确定你的意思是'当我检查文件列表时,没有文件消失'。请注意,删除模型实例时,它将从数据库中删除该行。如果模型具有FileField,则不会自动删除关联文件。