我在我的Tornado应用程序中使用wtforms-alchemy将SQLAlchemy模型渲染为HTML表单,如下所示:
class UserProfileForm(ModelForm):
class Meta:
model = models.User
only = ['username', 'first_name', 'last_name']
它工作正常,但表单上的字段按顺序last_name,username,first_name,这可能会让用户感到困惑。有没有办法设置生成的表单字段的特定顺序?
答案 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