10

作業中のアプリケーション用にDjango-adminをカスタマイズしています。これまでのところ、カスタマイズは作業ファイルであり、いくつかのビューを追加しました。しかし、change_list表示のレコードリンクを変更して、フォームの変更ではなく情報ページを表示する方法を知りたいですか?!

このブログ投稿で:​​http://www.theotherblog.com/Articles/2009/06/02/extending-the-django-admin-interface/ トムは言った:

"関数を定義してからmy_func.allow_tags=Trueを追加することで、リストビューに画像やリンクを追加できます"

よくわからなかった!!

現在、プロファイル機能があります。これは、レコードリストのメンバーをクリックすると表示できます(または、[プロファイル]という別のボタンを追加します)。また、すべてのメンバーにリンクを追加する方法(編集:リダイレクトして編集します)このメンバーのフォーム)。

どうすればそれを達成できますか?!

4

2 に答える 2

23

私があなたの質問を正しく理解しているなら、あなたはあなた自身のリンクをリストビューに追加したいと思います、そしてあなたはそのリンクがあなたが作成したいくつかの情報ページを指すようにしたいです。

これを行うには、AdminオブジェクトでリンクHTMLを返す関数を作成します。次に、リストでその関数を使用します。このような:

class ModelAdmin(admin.ModelAdmin):
    def view_link(self):
        return u"<a href='view/%d/'>View</a>" % self.id
    view_link.short_description = ''
    view_link.allow_tags = True
    list_display = ('id', view_link)
于 2009-07-23T16:04:54.870 に答える
10

http://docs.djangoproject.com/en/dev/ref/contrib/admin/、ModelAdmin.list_displayパーツを見てください、それは言います:モデルの属性を表す文字列。これは呼び出し可能オブジェクトとほぼ同じように動作しますが、このコンテキストでの自己はモデルインスタンスです。完全なモデルの例を次に示します。

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    color_code = models.CharField(max_length=6)

def colored_name(self):
    return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name)
colored_name.allow_tags = True

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name')

したがって、これら2つのメソッドをPersonに追加すると

def get_absolute_url(self):
    return '/profiles/%s/' % (self.id)

def profile_link(self):
    return '<a href="%s">%s</a>' % (self.get_absolute_url(), self.username)
profile_link.allow_tags = True

PersonAdminをに変更します

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name', 'profile_link')

その後、あなたはやった

于 2009-07-23T16:08:31.870 に答える