3

django admin の list_display にフォームを表示したいのですが、この問題に直面しています:

次のようなものを定義すると:

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('foo', 'pagar_pase')

    def pagar_pase(self, obj):
        return """<form action="." method="post">Action</form> """
    pagar_pase.description = 'Testing form output'
    pagar_pase.allow_tags = True

結果はタグなしのアクションですが、これを解決する方法はありますか?

ありがとう

4

3 に答える 3

4

ドキュメントに表示される内容は次のとおりです。いくつかのヒント:

タプルに含める必要があり、三重引用符よりも使用する方がよいとpagar_pase思います。list_displayformat_html

from django.utils.html import format_html

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 format_html('<span style="color: #{0};">{1} {2}</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')

ここでは、最初にモデルを定義してから を作成し、欠落ModelAdminしている にメソッドの名前を含めます。list_display

コードは次のようになります。

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('foo', 'my_custom_display', 'pagar_pase')

    def pagar_pase(self, obj):
        # I like more format_html here.
        return """<form action="." method="post">Action</form> """
    pagar_pase.description = 'Testing form output'
    pagar_pase.allow_tags = True

それが役に立てば幸い!

于 2013-05-07T04:13:50.747 に答える
1

リストされたアイテムに対してアクションをトリガーしようとしているようです。おそらく、これは独自のadmin アクションを作成することでより適切に実行できます。

次に例を示します。

def pagar_pase(modeladmin, request, queryset):
    """ Does something with each objects selected """
    selected_objects = queryset.all()
    for i in selected_objects:
        # do something with i

pagar_pase.short_description = 'Testing form output'

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('foo', 'my_custom_display')
    actions = [pagar_pase]
于 2013-05-07T05:16:33.243 に答える