2016-04-19 2 views
0

Во-первых, спасибо за то, что нашли время, чтобы прочитать мою проблему.
Я попытался добавить пользовательскую кнопку в мой список изменений adminList, но она всегда дает мне Страница не найдена (404)Django admin - добавить пользовательскую ссылку, чтобы изменить вид списка

Это мой код modelAdmin:

class MyModelAdmin(admin.ModelAdmin): 

    class Media: 

     js = ('admin/js/additional_js.js',) 

    model = MyModel 

    def get_urls(self): 
     urls = super(MyModelAdmin, self).get_urls() 
     analyze_url = patterns('', 
          (r'^(?P<pk>\d+)/analyze/$', 
         self.admin_site.admin_view(self.analyze_view)) 
          ) 
     return analyze_url + urls 

    def analyze_view(self, request, pk): 
     # some code here 
     HttpResponseRedirect(
      reverse('admin:myapp_MyModel_change', args=(pk,)) 
     ) 

моего JQuery код для добавления пользовательской ссылки, чтобы изменить вид списка:

(function($) { 
    $(document).ready(function($) { 
     $(".object-tools").append('<li><a href="analyze/" class="link">Analyze</a></li>'); 
    }); 
})(django.jQuery); 

, когда я нажимаю на свою собственную ссылку, он дает мне следующее:

Объект MyModel с первичным ключом «3/change/analysis» не существует.

Я вижу, что ссылка не указывает на вид
Может кто-нибудь помочь мне исправить эту проблему.
Thanks

ответ

1

В Django 1.9, адрес изменения admin был изменен на /admin/<app>/<model>/<pk>/change/ (release notes).

Таким образом, нет смысла ссылаться на href="analyze/" в вашем html. Относительный URL-адрес обрабатывается как /admin/<app>/<model>/3/change/analyze, а не /admin/<app>/<model>/3/analyze, как вы ожидаете.

Вы, вероятно, может решить эту проблему, изменив ссылку на:

<a href="../analyze/" ... 

В идеале, было бы лучше, чтобы изменить URL, а не с относительной ссылкой. Я думаю, что это сделает код менее хрупким.

Поскольку вы используете Django 1.9, вы можете обновить свой код, чтобы использовать список, а не patterns:

from django.conf.urls import url 

analyze_url = [ 
    url(r'^(?P<pk>\d+)/analyze/$', self.admin_site.admin_view(self.analyze_view)), 
] 
+0

Большое спасибо, вы спасли мою жизнь. – abdoBim

+0

против предложенного изменения дает ошибку ** TypeError: может только конкатенация кортежа (а не «список») на кортеж ** – abdoBim

+0

Я пропустил 'url()'. Не уверен, что это была проблема. – Alasdair

Смежные вопросы