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_display元组中,而且你最好使用format_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 回答
2

好的,所以这里的问题是 list_display 在一个 html 表单内,所以我试图在一个表单内显示一个表单,这是一个坏主意......下面解释了原因

你能嵌套html表单吗?

希望能帮助到你。

于 2013-05-11T02:46:44.387 回答
1

您似乎正在尝试对列出的项目触发操作。也许通过编写您自己的管理操作可以更好地执行此操作

这是一个例子:

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 回答