Wtforms-alchemy字段顺序

时间:2013-10-03 22:23:46

标签: python sqlalchemy wtforms

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

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

它工作正常,但表单上的字段按顺序last_name,username,first_name,这可能会让用户感到困惑。有没有办法设置生成的表单字段的特定顺序?

3 个答案:

答案 0 :(得分:4)

我做了this帖子建议的内容,并且它一直在为我完美运作。

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

答案 1 :(得分:2)

你应该把表格的渲染放在模板中。

喜欢

{{ form.username }}
{{ form.first_name }}
{{ form.last_name }}

答案 2 :(得分:1)

ModelForm继承时,解决方案https://stackoverflow.com/a/18475322/892040对我无效。但是,这确实有效:

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