2015-05-04 1 views
1

В ситуации, когда у вас есть подклассовка модели в peewee, как вы сообщаете peewee какой порядок создания столбцов в таблице? В следующем примере порядок - «b, c, a», но я хочу «a, b, c».Изменение порядка столбцов в таблице для подкласса модели

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

class Table(BaseModel): 
    a = CharField() 

database.create_table(Table) 

Заказ имеет значение, так как это область песочницы нашего продукта, где мы тестируем новые изменения. Пользовательский интерфейс очень общий, но пользователи все равно должны иметь возможность использовать продукт, поэтому необходимы некоторые улучшения удобства использования, такие как порядок столбцов.

ответ

2

Когда peewee создает таблицу, он calls get_fields, который вызывает get_sorted_fields, который использует _sort_key каждого поля, которое основано на порядке определения полей. Поле в подклассе определяется после поля в родительском классе, поэтому оно будет сортироваться ниже.

Единственный способ изменить порядок столбцов будет создан в таблице подкласс Field или ModelOptionsBaseModel использовать подклассы ModelOptions и т.д.), переопределить соответствующий код, чтобы применить другой порядок сортировки, и использовать ваши новые подклассы повсюду.

Более практичное и поддерживаемое решение состоит в том, чтобы просто сохранить список сбоку, который называет столбцы в том порядке, который вы хотите, а затем отправить это интерфейсу, чтобы сообщить ему, как отображать столбцы. Когда вы добавляете новый столбец, просто добавьте его в правильный порядок в этом списке.