2015-09-22 2 views
0

В моем админке я хочу поставить свой пользовательский вид. Когда я нажимаю на название модели, я хочу, чтобы перенаправить на настраиваемое представление не на списке модели:django admin redirect to my custom view

class MyAdmin(admin.ModelAdmin): 
def get_urls(self): 
    urls = super(MyAdmin, self).get_urls() 
    csv_urls = patterns('', url(r'^my/url/$', admin.site.admin_view(self.my_view))) 

    return csv_urls + urls 

def my_view(self, request): 
    return render_to_response("my_template.html") 

Я зарегистрировал модель с администратором.

Я вижу имя модели, но когда я нажимаю на нее, она не перенаправляется на мой URL, чтобы показать мой взгляд. Он перенаправляется в обычный режим просмотра списка.

Как я могу перенаправить его на мой взгляд? Заранее благодарен

ответ

0

Если вы хотите рендеринг статического шаблона, вы можете поместить шаблон в templates/admin/<app name>/<model name> и назовите его change_list.html.

Или вы можете переопределить changelist_view() следующим образом:

class MyAdmin(admin.ModelAdmin): 
    def changelist_view(self, request, object_id, form_url='', extra_context=None): 
     return render_to_response("my_template.html") 
+0

Это не то, что я действительно хотел. Я просто хочу, когда я нажимаю на свое имя модели в admin. Я хочу, чтобы оно было перенаправлено на мое представление. Я бы хотел поставить гипер ссылку на имя модели, где она должна быть перенаправлена ​​на заданное значение. – aryan

+0

Точно, где вы хотите это? На странице индекса администратора? –

0

Чтобы изменить вид добавления/изменения модели, которая зарегистрирована с администратором, вы можете:

  1. перезаписать Добавить/изменить формы, указав его в modeladmin.
  2. Используйте настраиваемое поле в полях modeladmin list_display, которое позволяет использовать теги html, чтобы вы могли создать ссылку с возможностью клика.

Вариант 1 является самым простым и дает вам преимущество в том, что вы используете шаблон администратора, наследующий от шаблонов администратора выше в дереве шаблонов. Ваш код должен быть похож на:

from .forms import MyForm 

class MyAdmin(admin.ModelAdmin): 
    form = Myform 

Вариант 2 позволяет использовать совершенно отдельный новый вид. Но вы должны сами позаботиться о разрешениях, и шаблон должен наследоваться от шаблона администратора, если вы хотите сделать его похожим на ваш «в админе». Вы можете сделать это, расширив admin/base_site.html.

from django.core.urlresolvers import reverse 
from .views import my_view 

class MyAdmin(admin.ModelAdmin): 
    list_display = ['mychangelink'] 

    def mychangelink(self, obj): 
     return '<a href="{0}">Change</a>'.format(reverse(my_view, args=[obj.pk])) 
    mychangelink.allow_tags = True 

Джанго ускользают HTML по умолчанию, поэтому вам нужно разрешить теги к фактическому сделать его активную ссылку. В противном случае это будет просто текст.