2013-10-03 57 views
2

我使用wtforms - 鍊金術在我的龍捲風應用渲染SQLAlchemy的模式,以HTML形式是這樣的:Wtforms-煉丹字段順序

class UserProfileForm(ModelForm): 
    class Meta: 
     model = models.User 
     only = ['username', 'first_name', 'last_name'] 

它工作得很好,但表單上的字段是爲了姓氏,用戶名,名字,這可能會讓用戶感到困惑。有沒有辦法設置生成的表單字段的特定順序?

回答

2

我做了什麼this後提出,其已經爲我工作完美無缺。

簡而言之,添加一個指定正確順序的類關鍵字,然後更新_unbound_fields從iter字段按正確的順序。

2

您應該將表單的渲染放在模板中。

{{ form.username }} 
{{ form.first_name }} 
{{ form.last_name }} 
+3

感謝您的迴應!但是,如果只是這麼簡單...... 請參閱我正在以自動方式呈現所有表格(我有相當多的表格),如下所示: '{%for field in form%}

{%原料field.label%}
{%原字段%}
{%結束%}' 其實,我使用wtforms - 鍊金術庫的唯一原因是爲了避免像一個你」樣板已經提供。 所以我最初的問題歸結爲:如何提供字段順序沒有任何明確的形式枚舉模板? –

1

解決方案https://stackoverflow.com/a/18475322/892040ModelForm繼承時不起作用。然而,這確實有效:

class ItemReview(ModelForm): 
    class Meta: 
     model = Item 
    _field_order = ['field1', 'field2'] 

    def __init__(self, *args, **kwargs): 
     super(ItemReview, self).__init__(*args, **kwargs) 
     field_order = getattr(ItemReview, '_field_order') 
     visited = [] 
     if field_order: 
      new_fields = OrderedDict() 
      for field_name in field_order: 
       if field_name in self._fields: 
        new_fields[field_name] = self._fields[field_name] 
        visited.append(field_name) 
      for field_name in self._fields: 
       if field_name in visited: 
        continue 
       new_fields[field_name] = self._fields[field_name] 
      self._fields = new_fields