'tuple' 对象没有属性 'fields' 使用 Django Crispy Forms

'tuple' object has no attribute 'fields' using Django Crispy Forms

给定一个表单,我想使用 django-crispy-forms 在 Div 中包装一些字段。

class SignupForm(forms.Form):
  def __init__(self, *args, **kwargs):
    super(SignupForm, self).__init__(*args, **kwargs)
    self.helper = FormHelper()
    self.helper.form_method = 'POST'
    self.helper.form_action = ''
    self.helper.add_input(Submit('submit', 'Create Account', css_class="btn-success"))
    self.helper.layout = Layout(
        Div(
            'username',
            'password',
            css_class="col-md-6"
        ),
        Div(
            'name',
            'age',
            css_class="col-md-4"
        ),
    ),
  username=forms.CharField(max_length=128)
  password=forms.CharField(max_length=128, widget=forms.PasswordInput())
  name=forms.CharField(max_length=128)
  age=forms.IntegerField(required=False)

但是,在视图中,当我使用 {% crispy form %} 时,它向我抛出错误 'tuple' object has no attribute 'fields'

我怀疑我的布局没有正确实例化,但不能从这里移动。

自己解决了。解决办法是在 Layout 的末尾多加一个逗号。正确的解法是:

self.helper.layout = Layout(
    Div(
        'username',
        'password',
        css_class="col-md-6"
    ),
    Div(
        'name',
        'age',
        css_class="col-md-4"
    ),
)

通过删除最后一行的逗号。