我想在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
结果是没有标签的Action,任何想法如何解决这个问题?
感谢
答案 0 :(得分:3)
这是文档中出现的内容。几点提示:
我认为您应该在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
希望它有所帮助!
答案 1 :(得分:2)
好的,所以这里的问题是list_display在html表单中,所以我试图在表单中显示一个表单,这是一个坏主意......下面解释了为什么
希望它有所帮助。
答案 2 :(得分:0)
看起来您正在尝试触发列出的项目上的操作。也许通过编写自己的admin actions来更好地执行此操作。
以下是一个例子:
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]