更改子表模型的表中的列顺序

时间:2015-05-04 18:02:35

标签: python sqlite peewee

在peewee中有子类模型的情况下,如何告诉peewee在表中创建列的顺序是什么?在以下示例中,顺序为" b,c,a",但我想要" a,b,c"。

class BaseModel(Model):
  b = CharField()
  c = CharField()

class Table(BaseModel):
  a = CharField()

database.create_table(Table)

订单很重要,因为这是我们测试新变化的产品的沙箱区域。用户界面非常通用,但用户仍然需要能够使用该产品,因此必须增加一些可用性,例如列顺序。

1 个答案:

答案 0 :(得分:2)

当peewee创建一个表时,它calls get_fields,它调用get_sorted_fields,它使用每个字段的_sort_key,它基于字段的定义顺序。子类中的字段是在父类中的字段之后定义的,因此它将排序较低。

更改表中将创建列的顺序的唯一方法是子类FieldModelOptions(和BaseModel以使用子类ModelOptions,等),覆盖相关代码以应用不同的排序顺序,并在任何地方使用新的子类。

更实用和可维护的解决方案是只需按顺序维护一个列表,按照您想要的顺序命名列,然后将其发送到前端,告诉它如何显示列。添加新列时,只需在该列表中以正确的顺序添加它。