2016-08-04 33 views
0

Ich bin eine zusätzliche Ansicht zu django-admin hinzufügen. Mein Ziel ist es, die change_form überschreiben, um die Felder nur lesen und fügen Sie einige benutzerdefinierte Formulare für die Arbeit mit den foreign_key Objekte, und auch eine Bearbeitungsseite, die die zusätzliche Ansicht, die ich erstellen würde.Django zusätzliche Ansichten in Django Admin - URL Problem

Ich habe dies verwendet, um mich selbst zu starten, aber ich habe schon ein Problem, wahrscheinlich wegen der Django-Version, die ich verwende.

http://patrick.arminio.info/additional-admin-views/

Das Problem, das ich habe, ist

TypeError at /admin/customers/order/1/review/ 
review() missing 1 required positional argument: 'id' 

Ich bin mir nicht ganz sicher, wie dies zu beheben. Mein Code ist hier:

class OrderAdmin(admin.ModelAdmin): 
    review_template = 'review.html' 

    def get_urls(self): 
     urls = super(OrderAdmin, self).get_urls() 
     review_urls = patterns('', 
      (r'\d+/review/$', self.admin_site.admin_view(self.review)), 
     ) 
     return review_urls + urls 

    def review(self, request, id): 
     order = Order.objects.get(pk=id) 

     return render_to_response(self.review_template, { 
      'title': 'Review order: %s' % order.id, 
      'entry': order, 
      'opts': self.model._meta, 
      'root_path': self.admin_site.urls, 
     }, context_instance=RequestContext(request)) 

Ich bin neu in Django und nützlichsten Informationen in dem Buch ist, nicht die Dokumentation, die viel zu lange ist für Django selbst zu nennen Der Web-Framework für Perfektionisten mit Terminen.

Antwort

0

Ihr URL-Muster erfasst keine Werte und muss daher nicht an die Ansichtsmethode übergeben werden. Sie müssen einfangende Klammern verwenden:

r'(\d+)/review/$', 

obwohl in der Regel würden Sie eine benannte Gruppe, um den Wert als Schlüsselwort Argument an:

r'(?P<id>\d+)/review/$',