【问题标题】:How to change a function-based-view to a class-based-view如何将基于函数的视图更改为基于类的视图
【发布时间】:2014-08-07 08:46:29
【问题描述】:

我正在使用 Django 1.6.5。基本上我想要的是,当用户单击“删除”链接时,不会显示任何表单。只需更新 *_deleted_at 字段,然后显示收件箱,无需重定向到 message_confirm_delete.html 模板。

鉴于以下情况:

urls.py

...
url(r'^delete/(?P<message_id>[\d]+)/$', delete, name='messages_delete'),
...

views.py

def delete(request, message_id, success_url=None):
    user = request.user
    now = timezone.now()
    message = get_object_or_404(Message, id=message_id)
    deleted = False
    if success_url is None:
        success_url = reverse('messages:messages_inbox')
    if 'next' in request.GET:
        success_url = request.GET['next']
    if message.sender == user:
        message.sender_deleted_at = now
        deleted = True
    if message.recipient == user:
        message.recipient_deleted_at = now
        deleted = True
    if deleted:
        message.save()
        return HttpResponseRedirect(success_url)
    raise Http404

如何将以下基于函数的视图转换为基于类的视图?不确定哪一个适合这里:UpdateViewDeleteView

【问题讨论】:

  • 为什么您认为切换到基于类的视图可以满足您的要求?就前端而言,基于类和基于函数的视图的工作方式完全相同。切换绝对没有区别。
  • 由于您指的是删除操作,因此应该使用 DeleteView,为了添加您的自定义逻辑,只需覆盖默认方法即可。 ccbv.co.uk
  • 但我并没有删除记录。只需更新模型中的字段,例如在回收站中显示为已删除。

标签: django django-class-based-views


【解决方案1】:

对于这种情况,您也可以使用RedirectView 或任何带有DeletionMixin 的视图类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2021-05-30
    • 2013-01-25
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多