我有一个名为CMS的应用程序,包含类别和文章。很简单。
我覆盖app_index.html
以启用基于ajax的拖放顺序并将文章从一个类别移动到另一个类别。
现在,我希望在将文章或类别保存/删除到cms“app_index.html
而不是模型的change_list.html
后重定向。怎么办呢?
由于
class Category(models.Model):
order = models.IntegerField()
title = models.CharField(max_length=100)
text = models.TextField()
class Article(models.Model):
published = models.BooleanField(default=None)
images = generic.GenericRelation(Photo)
category = models.ForeignKey(Category)
title = models.CharField(max_length=100)
text = models.TextField()
order = models.IntegerField(blank = True, null = True)
丹尼尔的答案完成了一半的工作:在更改文章和类别后重定向。
一个不太优雅的解决方案:urls.py中的重定向
def redirect_cms(response):
return HttpResponseRedirect('/admin/cms/')
urlpatterns += patterns('',
(r'^admin/cms/article/$',redirect_cms),
还有其他想法吗?
答案 0 :(得分:10)
在admin
子类中,覆盖response_change
和/或response_add
方法。这些是在保存管理表单后分别为现有实例和新实例调用的,并负责返回当前带您到change_list页面的HttpResponseRedirect
。
查看django.contrib.admin.options
中的原始代码,了解您需要做什么。
修改:有两种方式可以进行删除:由于change_list
页面上的操作,您可以使用response_action
方法;或者由于在变更表上删除,在这种情况下,遗憾的是没有相应的方法。处理此问题的一种方法可能是覆盖应用程序的change_form.html
模板,并删除删除链接,以便删除的唯一方法是通过更改列表。无论如何都不理想。
答案 1 :(得分:5)
问题已经解答,但删除后的重定向问题不予承保。也许以下解决方案对某人有帮助。 Django的ModelAdmin
类具有delete_view
成员函数。它做了两件事:
POST
,则会显示删除确认页面。如果您确认并单击删除,则会生成POST
请求。POST
,视图会删除请求的项目,并返回HttpResponseRedirect
到更改列表(如果用户没有更改权限,则返回管理员索引)。所以,让我们重写如下。
from django.http import HttpResponseRedirect
class MyAdmin(admin.ModelAdmin):
def delete_view(self, request, object_id, extra_context=None):
"""Redirect to website index page on delete."""
response = super(MyAdmin, self).delete_view(request, object_id, extra_context)
# Use our own redirect
if isinstance(response, HttpResponseRedirect):
return HttpResponseRedirect('/') # Any URL here
return response
在Django 1.6下,它似乎对我有用。
答案 2 :(得分:4)
从Django 1.7开始,有一个response_delete
方法可以覆盖管理对象。见here
class MyAdmin(admin.ModelAdmin):
def response_delete(self, request, obj_display):
return HttpResponseRedirect("my_url")