Django模型不会删除,只需重新加载页面

时间:2015-08-10 22:11:20

标签: python django

我有一个上传仪表板,显示用户文件。文件由模型表示,仪表板有一个视图,删除操作有第二个视图。

以下是文件上传和相关模型客户端的模型:

@python_2_unicode_compatible
class ClientUpload(models.Model):

    client = models.ForeignKey(Client)
    created_at = models.DateTimeField(auto_now_add=True)
    file_upload = models.FileField(upload_to=generate_filename)

    def __str__(self):
        return self.client.company

    class Meta:
        verbose_name_plural = _("Client Uploads")
        verbose_name = _("Client Upload")


@python_2_unicode_compatible
class Client(models.Model):
    user = models.OneToOneField(User)
    company = models.CharField(max_length=100)

    def __str__(self):
        return self.company

    class Meta:
        verbose_name_plural = _("Clients")
        verbose_name = _("Client")
        permissions = (
            ("can_upload", _("Can upload files.")),
            ("can_access_uploads", _("Can access upload dashboard.")),
            ("is_client", _("Is a client.")),
        )

以下是delete视图的网址格式:

url(r'^dashboard/delete/(?P<upload_id>\d+)$', views.dashboard_delete, name='dashboard-delete'),

以下是仪表板和仪表板删除操作的视图:

def dashboard_delete(request, upload_id):
    p = get_object_or_404(ClientUpload, pk=upload_id)
    p.delete()  

    return HttpResponseRedirect(reverse('dashboard'))

@login_required(login_url='/dashboard-login/')
def dashboard(request):
    current_user = request.user
    current_client = request.user.client

    files = ClientUpload.objects.filter(client=current_client)

    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            dz_files = request.FILES.getlist('file_upload')
            for f in dz_files:
                new_file = ClientUpload(client=current_client, file_upload=f)
                new_file.save() 
                logger = logging.getLogger(__name__)
                logger.info("File uploaded from " + current_client.company)
        else:
            logger = logging.getLogger(__name__)
            logger.warning("Upload Failed")

        return HttpResponseRedirect(reverse('dashboard'))
    else:
        form = UploadFileForm()

    data = {'form': form, 'client': current_client, 'files': files}
    return render_to_response('dashboard.html', data, context_instance=RequestContext(request))

最后是文件列表的模板部分,其中调用了dashboard-delete视图:

<table class="table">
<tr>
    <th>{% blocktrans %}Filename{% endblocktrans %}</th>
    <th>{% blocktrans %}Size (Bytes){% endblocktrans %}</th>
    <th>{% blocktrans %}Upload Time{% endblocktrans %}</th>
    <th>{% blocktrans %}Actions{% endblocktrans %}</th>
</tr>
{% for file in files %}
    {% with uploaded_file=file.file_upload %}  
 <tr>
    <th>{{ uploaded_file.name|pathend }}</th>
    <th>{{ uploaded_file.size }}</th>
    <th>{{ file.created_at }}</th>
    <th><a href="{{ uploaded_file.url }}" id="view-btn"><i class="fa fa-search"></i></a><a href="{% url 'dashboard-delete' file.id %}"><i class="fa fa-trash-o"></i></a></th>
    {% endwith %}
{% endfor %}
</tr>   
</table>

在操作中,有一个带有锚点的图标 - 删除名为url的仪表板。我传入当前文件ID。然后在url.py文件中我将它传递给正则表达式。然后视图查找并删除该文件。我使用get_object_or_404()并且没有获得404,但页面只刷新并且没有删除任何内容。出于某种原因,当我按下删除图标时,我得到两个请求/ dashboard / delete / 5(5个将是该文件的upload_id)而不是一个。

任何帮助都会非常感激,为什么我的模型没有被删除,页面重新加载就是这样。我找不到有什么不对。我尝试使用catch重定向和dj调试工具栏,但它没有从仪表板删除视图捕获重定向回仪表板。这没有任何意义,通常会抓住重定向。

如果您需要更多信息或需要查看更多代码,请告诉我,我会发布,但您应该拥有所需的信息。我已经被困在这里一个星期,所以我真的可以用一些帮助来最终完成他的工作。

我知道ID是正确的,因为它们在管理面板中是相同的数字,当我将鼠标悬停在上面时,我会看到每个项目的ID,并且它们与管理面板的ID对齐。我也尝试过做{% url 'dashboard-delete' upload_id=file.id %}并且它也没有用,我认为无论如何我不认为它是一个kwarg。

我完全被困在这里。我已经多次完成这个确切的方法并且它一直有效。我错过了什么?

编辑:

经过进一步的测试,看起来这个视图从来没有被调用过,这没有任何意义。当我将鼠标悬停在链接上时,我会获得正确的URL,但视图永远不会被调用。我在顶部放了一条记录线,它永远不会发生。为什么会这样?什么会导致它不被称为?

注意到视图似乎根本没有被调用。我甚至无法从第一行的内部执行日志语句。为什么会这样?之前我使用过相同的删除视图,我甚至尝试过使用DeleteView的CBV。

1 个答案:

答案 0 :(得分:0)

我必须在urlpatterns上移动我的/ dashboard / delete / / dashboard,我知道这一点并且已经忘记了。现在工作。愚蠢的我。