flask peewee как изменить порядок полей при редактировании/создании форм

Для модели User я хочу поставить в нее встроенную модель ProjectNotes, и как изменить порядок полей при ее создании или редактировании? Например, измените порядок на ProjectNotes, username, email. (см. рис. ниже).

class User(BaseModel):
   username = peewee.CharField(max_length=80)
   email = peewee.CharField(max_length=120)

   def __unicode__(self):
       return self.username

class ProjectNotes(BaseModel):
   comment = peewee.CharField(max_length=64)
   user = peewee.ForeignKeyField(User)

   def __unicode__(self):
       return '%s - %s' % (self.comment)

class UserAdmin(ModelView):
   inline_models = (ProjectNotes,)

admin.add_view(UserAdmin(User))

введите здесь описание изображения


person Samoth    schedule 05.05.2017    source источник


Ответы (1)


Вы можете передавать дополнительные атрибуты например form_columns, form_label, column_labels для inline_models в качестве словаря:

class UserAdmin(ModelView):
    inline_models = [
        (ProjectNotes, {'form_columns': ('user', 'comment')})
    ]

Или создайте класс формы для вашей модели ProjectNotes:

from flask_admin.model.form import InlineFormAdmin

class ProjectNotesAdmin(InlineFormAdmin):
    form_columns = ('user', 'comment')

class UserAdmin(ModelView):
    inline_models = [ProjectNotesAdmin(ProjectNotes)]

Я также узнал, что мне нужно указать столбец первичного ключа в form_columns для flask_admin.contrib.sqla.ModelView. Не знаю, нужно ли вам делать то же самое для flask_admin.contrib.peewee.ModelView.

person Sergey Shubin    schedule 05.05.2017
comment
Спасибо, я попробовал оба метода, но возникает одна и та же ошибка: AttributeError: 'ProjectNotesForm' object has no attribute 'id' - person Samoth; 05.05.2017
comment
@Samoth Тогда похоже, что у peewee.ModelView та же проблема, что и у sqla.ModelView. Есть ли столбец «id» в вашей модели ProjectNotes? Попробуйте указать столбец «id» в вашем form_columns. - person Sergey Shubin; 05.05.2017
comment
@ Сергей Шубин: Нет, в моей модели ProjectNotes нет id, но могу добавить и попробовать еще раз. - person Samoth; 05.05.2017
comment
@ Сергей Шубин: После добавления id ошибок нет, но порядок отображается не так, как я хотел: пробовал inline_models = [ (ProjectNotes, {'form_columns': ('id', 'comment', 'user')}) ] - person Samoth; 05.05.2017
comment
@Samoth Похоже, peewee неявно добавляет столбец «id». Вы поступили правильно, явно добавив «id». Теперь вам просто нужно изменить порядок: ('id', 'comment', 'user') тот же порядок, что и раньше :) - person Sergey Shubin; 05.05.2017
comment
Спасибо, и я пытаюсь упорядочить все столбцы, включая столбец другой модели, например ('username', 'id', 'comment', 'user','email') - person Samoth; 05.05.2017