我在模型类上使用方法来显示更改列表表单上的按钮。我有一个非常奇怪的问题,只有第一个按钮不起作用。即使我有两个单独的按钮方法,左边也不会在第一行工作。 我查看了页面的源代码,错误是
Saw a form start tag but there was already an active form element. Nested tags are not allowed. Ignoring the tag.
进一步检查我发现
<form id="grp-changelist-form" action="" method="post"><input type='hidden' name='csrfmiddlewaretoken' value='l6Z2ez9F00XMVQjp0KIRIKgRIcQ9nnQc' />
这个表格是公开的。 任何克服这个问题的建议。 相关代码是
Class MyModel(models.Model):
.
.
def method1(self):
return '<form action="path/to/action1" method="get"><input type="submit" value="%s"></form>' % (self.id, label)
def method2(self):
return '<form action="path/to/action2" method="get"><input type="submit" value="%s"></form>' % (self.id, label)
然后在admin的list_display上使用这两个方法。 我正在使用Grappelli。
答案 0 :(得分:1)
看起来您只是想在管理员更改列表中提供一个链接,以转到将对该行执行操作的视图 - 您不需要表单来执行此操作,因为您只需执行GET无论如何都有一个链接:
def method2(self):
return '<a href="path/to/action/%s?param1=%s" target="_blank">Do Something</a>' % (self.id, label)
您遇到问题的原因是you can't nest a form within a form(django管理员中的整个更改列表已经是表单)
答案 1 :(得分:0)
如果您只想在一行上执行操作。使用行动: https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/
您还可以创建一个list_editable字段: https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_editable
如果你想发明自己的东西(为什么要使用框架?): 使用get参数建立链接。就像Timmy O'Mahony建议或将您的链接(没有获取参数)指向自定义模型表单。