2016-04-14 86 views
1

由于Django的1.7它可以覆盖一个管理型的response_delete方法来迫使它删除后重定向到一个定制URL。Django管理重定向到父对象后删除

class MyAdmin(admin.ModelAdmin): 

    def response_delete(self, request, obj_display, obj_id): 
     return HttpResponseRedirect("my_url") 

我需要更进一步借此并重定向到已删除对象的父,这似乎应该是一个相当常见的情况。

但是由于对象的删除没有obj可从获取父ID。

的哈克解决方案,我发现是通过父ID在子对象(obj_display)的Unicode表示,然后解析字符串找到它:

obj_display = '1 (Product 123)' 

integers = re.findall(r'\d+', obj_display) 
product_id = int(integers[1]) 

product_id = 123 

然而,这似乎是一个不雅的解决方案。例如,如果对象的unicode方法改变了重定向可能会中断。有没有更好的办法?

编辑

由“父”与“子”我的意思是删除(“子”)的对象有一个外键到另一个对象(它的“父”)

+0

你是什么意思与“已删除对象的父”? – trinchet

+0

我的意思是删除的对象有一个外键给另一个对象,这是它的'父'。 –

回答

0

您可以覆盖这方法delete_view(在删除它之前,您可以获得对象的父级),而不是执行此操作,只需重定向到父级管理员页面即可。

0

如果你想保留使用的delete_view休息的能力,我建议都覆盖和delete_viewresponse_delete这样的:

class MyModelAdmin(admin.ModelAdmin): 
    deleted_fk = None 

    def delete_view(self, request, object_id, extra_context=None): 
     self.deleted_fk = MyModel.objects.get(id=object_id).fk 
     return super(MyModelAdmin, self).delete_view(request, object_id, extra_context) 

    def response_delete(self, request, obj_display, obj_id): 
     return redirect('url to deleted_fk')