django-admin:如何在对象保存后重定向到另一个URL?

mon*_*kee 5 django django-admin

在Django Admin中,保存对象总是返回到它的对象列表.现在我想在保存付款对象时转到发票对象列表.

我尝试了几件事:

在admin.py中:

@receiver(post_save, sender=Payment)
def custom_redirect(sender, instance, **kwargs):
    return HttpResponseRedirect('/admin/sales/invoice')
Run Code Online (Sandbox Code Playgroud)

要么

class PaymentAdmin(VersionAdmin, admin.ModelAdmin):
    def change_view(self, request, object_id, extra_context=None):
        return HttpResponseRedirect('/admin/sales/invoice')
Run Code Online (Sandbox Code Playgroud)

我尝试使用redirect()而不是HttpResponseRedirect,而且没有效果.在将错误的代码插入post_save时,我收到一条错误消息 - 因此它会被触发,但重定向不会发生.

任何提示都会非常苛刻 - 因为我在这个"简单"的问题上被困了几天.

谢谢

Ala*_*air 13

您可以覆盖response_addresponse_change方法.

from django.shortcuts import redirect

class PaymentAdmin(VersionAdmin, admin.ModelAdmin):
    def response_add(self, request, obj, post_url_continue=None):
        return redirect('/admin/sales/invoice')

    def response_change(self, request, obj):
        return redirect('/admin/sales/invoice')
Run Code Online (Sandbox Code Playgroud)

无法从信号处理程序内部返回响应.您不希望覆盖,change_view因为它处理保存表单以及返回响应.