2

我在我的 Tornado 应用程序中使用 wtforms-alchemy 将 SQLAlchemy 模型呈现为 HTML 表单,如下所示:

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

它工作得很好,但表单上的字段按姓氏、用户名、名字的顺序排列,这可能会让用户感到困惑。有没有办法设置生成表单字段的特定顺序?

4

3 回答 3

4

我按照这篇文章的建议做了,它对我来说完美无缺。

简而言之,添加一个指定正确顺序的类关键字,然后使用正确顺序的字段从iter更新 _unbound_fields 。

于 2014-04-08T20:09:12.310 回答
2

您应该将表单呈现在模板中。

喜欢

{{ form.username }}
{{ form.first_name }}
{{ form.last_name }}
于 2013-11-05T15:51:38.490 回答
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           
于 2015-01-12T12:57:39.950 回答