0

首先:我无法找到这个问题的正确标题。

无论如何,问题是:

我必须在模板中填写表格,并且此表格的字段取决于用户。例如,您将integer(整数不是数据类型)作为参数传递给方法,它应该返回如下:

fileds = forms.IntegerField()

如果你通过bool了,那么它应该是这样的:

fields = forms.BooleanField()

这样我就可以使用它们来创建我的表单。我尝试使用此代码,但它以字符串的形式返回。

一些.py 文件:

choices = (('bool','BooleanField()'),
            ('integer','IntegerField()'))
def choose_field():
   option = 'bool' # Here it is hardcoded but in my app it comes from database.
   for x in choices:
      if x[0]==option:
         type = x[1]
   a = 'forms'
   field = [a,type]
   field = ".".join(field)
   return field

当我打印它打印的字段时'forms.BooleanField()'。我也使用了这个返回值,但是没有用。艾米解决这个问题?

4

1 回答 1

2

最简单的方法是创建表单类并包含所有可能选择的字段。然后在这个类中写一个构造函数,隐藏不想出现的字段。构造函数必须接受一个参数来指示我们需要哪些字段。将此参数存储在表单中并在方法中使用它clean来根据此参数更正收集的数据可能很有用。

class Your_form(forms.ModelForm):
  field_integer = forms.IntegerField()
  field_boolean = forms.BooleanField()

  def __init__(self, *args, **kwargs):
    option = kwargs["option"]
    if option == "integer":
      field_boolean.widget = field_boolean.hidden_widget()
    else:
      field_integer.widget = field_integer.hidden_widget()
    super(Your_form, self).__init__(*args, **kwargs)

在您的控制器中:

option = 'bool'
form = Your_form(option=option)
于 2012-06-17T09:34:56.567 回答