2

Djangoadminでカスタムビューを機能させようとしています。私は次のモデルを持っています:

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を初めて使用するので、基本的にどこかに愚かな間違いがあるので、反対票を投じないでください:)

4

1 に答える 1

2

モデルを引数として渡すだけの場合redirect、モデルのget_absolute_url()メソッドが呼び出されますが、これはおそらく定義されていません(ドキュメントを参照)。
したがって、先に進んでget_absolute_url()、リセラークラスにメソッドを追加してください。

于 2013-02-17T17:03:27.103 に答える