在 django 管理面板中重定向不正确

Redirecting is not properly in django admin panel

我有一个方法可以在管理面板中重定向页面:

http://127.0.0.1:8000/admin/events/event/

至:

http://127.0.0.1:8000/admin/events/event/?date__lt=2018-6-11

我得到的是信息而不是页面:

The page isn’t redirecting properly

这是我的代码: admin.py

第一版代码:

def changelist_view(self, request, extra_context=None):
    if not request.method != 'GET':
        url = '{}?date__lt={}'.format(reverse('admin:events_event_changelist'), date.today())
        return HttpResponseRedirect(url)

编辑后的代码

def changelist_view(self, request, extra_context=None):
    q = request.GET.get('date')
    if not q:
        url = '{}?date__lt={}'.format(reverse('admin:events_event_changelist'), date.today())
        return HttpResponseRedirect(url)

请提示哪里可能是错误的代码。

您的浏览器显示的错误消息表明您的网站陷入了无限重定向循环。看看你的情况,原因就很清楚了:

if not request.method != 'GET':

相当于

if request.method == 'GET':

重定向总是导致 GET 请求,因此您的视图将一次又一次地重定向...

我假设您真正想要实现的是仅在没有 URL 参数时才重定向。这些存储在 request.GET 中,因此您的条件将如下所示:

if not request.GET:

如果您总是想限制显示的事件,覆盖 get_queryset 方法而不是重定向可能更容易。

class EventAdmin(admin.modelAdmin):
    def get_queryset(self, request):
        qs = super(EventAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            # Allow superusers to see all events
            return qs
        else:
            return qs.filter(date__lt=date.today())

admin.site.register(Event, EventAdmin)