2014-04-26 33 views
0

我得到上面的错误,当我调用自定义视图的方法,__init __()得到了一个意想不到的关键字参数“PK”的Django

#views.py 

class MyEntryAdmin(admin.ModelAdmin): 
    review_template = 'admin/polls/myentry/review.html' 

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

    def review(self, request, id): 
     entry = MyEntry.objects.get(pk=id) 

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

admin.site.register(MyEntry, MyEntryAdmin) 

#urls.py 
urlpatterns = patterns('polls.views' 
    url(r'^myentry/(?P<pk>\d+)/review/$', 'MyEntryAdmin', name='review') 
) 

当我调用的URL http://localhost:8000/admin/polls/myentry/1/review/我得到的错误

__init__() got an unexpected keyword argument 'pk' 

Traceback:  
Environment: 
Request Method: GET 
Request URL: `http://localhost:8000/admin/polls/myentry/1/review/` 

Django Version: 1.6.2 
Python Version: 2.7.5 
Installed Applications: 
    ('django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'polls') 
Installed Middleware: 
    ('django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware') 


Traceback: 
File "/home/sun1/projectFolder/myenv/local/lib/python2.7/site-packages/Django-1.6.2-py2.7.egg/django/core/handlers/base.py" in get_response 
    114.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

Exception Type: TypeError at /admin/polls/myentry/1/review/ 
Exception Value: __init__() got an unexpected keyword argument 'pk' 
+0

您是否有错误的相关跟踪? – EyasSH

+0

我已添加跟踪,谢谢。 – user3575232

+0

有趣。在urls.py(你的代码的最后一部分)中使用'pk'会不会是问题? – EyasSH

回答

0

您不使用ModelAdmin类本身作为URL模式的目标。 ModelAdmin类在您的现有管理员处注册,所以其get_urls方法被调用并且相关的URL被添加到默认管理员的URL中。

从urls.py中删除该行,它应该可以工作。

+0

我删除了urls.py中的那一行,但是我收到了这个错误 - review( )只需要3个参数(给出2个参数) – user3575232

+0

你在get_urls的正则表达式中忽略了围绕\ d +的圆括号。它应该和你在urls.py中的一样(减去前缀)。 –

+0

对不起现在我得到了错误,review()得到了一个意想不到的关键字参数'pk', 我改成(r'^(?P \ d +)/ review/$',self.admin_site.admin_view(self。评论)),感谢您的帮助 – user3575232

相关问题