2013-02-17 119 views
2

我試圖讓自定義視圖在Django admin中工作。我有下一個型號:添加自定義視圖到Django管理員

class Reseller(models.Model): 
    first_name = models.CharField(max_length=64, verbose_name='First Name') 
    last_name = models.CharField(max_length=64, verbose_name='Last Name') 
    email = models.CharField(max_length=64, verbose_name='E-mail') 
    password = models.CharField(max_length=64, blank=True, editable=False) 

這是我如何添加一個自定義按鈕(重置密碼)。自定義視圖(擴展change_form.html)我有這樣的:

{% extends "admin/change_form.html" %} 

{% load i18n %} 

{% block object-tools %} 
{% if change %} 
    <ul class="object-tools"> 
    <li><a href="reset_password/">Reset Password</a></li> 
    </ul> 

{% endif %} 
{% endblock %} 

這就是我在admin.py

from django.conf.urls.defaults import patterns 
from django.contrib import admin 
from django.shortcuts import redirect 
from django.shortcuts import render_to_response 
from django.template import RequestContext 

from myapp.resellers.models import Reseller 

class ResellerAdmin(admin.ModelAdmin): 
    list_display = ('id', 'first_name', 'last_name', 'email') 
    list_filter = ('email') 
    search_fields = ('first_name', 'last_name', 'email') 
    ordering = ['-id', ] 

    def get_urls(self): 
     urls = super(ResellerAdmin, self).get_urls() 
     my_urls = patterns('', 
          (r'(?P<id>\d+)/reset_password/$', 
          self.admin_site.admin_view(self.reset_password)), 
         ) 
     return my_urls + urls 

    def reset_password(self, request, id): 
     entry = Reseller.objects.get(pk=id) 
     [...GENERATE AND SEND PASSWORD FUNCTION GOES HERE...] 
     return redirect(entry) 


admin.site.register(Reseller, ResellerAdmin) 

當我運行這段代碼我得到了下:argument of type 'Reseller' is not iterable。我是Django的新手,所以基本上有一個愚蠢的錯誤,所以請不要downvote :)

回答

2

如果你只通過模型作爲參數redirect那麼get_absolute_url()方法將被稱爲,你大概有未定義(見docs)。
因此,請繼續並向您的經銷商類添加get_absolute_url()方法。