Django管理员使用按钮

时间:2013-06-21 09:49:41

标签: django django-admin

我在模型类上使用方法来显示更改列表表单上的按钮。我有一个非常奇怪的问题,只有第一个按钮不起作用。即使我有两个单独的按钮方法,左边也不会在第一行工作。 我查看了页面的源代码,错误是

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。

2 个答案:

答案 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建议或将您的链接(没有获取参数)指向自定义模型表单。