Как изменить порядок полей в форме Flask-Admin с помощью селектора Ajax с методом scaffold_form?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как изменить порядок полей в форме Flask-Admin с помощью селектора Ajax с методом scaffold_form?

Сообщение Anonymous »

Я создал собственный селектор Ajax в представлении Flask-Admin для оптимизации поиска в полеbirth_city_id (более 36000 элементов) с помощью form_ajax_refs (на основе статьи «Как создать поле формы Ajax в Flask Admin»). выполнение). Хотя селектор Ajax работает правильно, у меня возникла проблема с отображением полей в форме.
Полеbirth_city_id появляется только в том случае, если я добавляю его явно в scaffold_form code> (я тоже пробовал использовать атрибут form_overrides, но безуспешно). Однако в результате это поле будет помещено в конец формы, тогда как оно должно располагаться перед полями Personal_information и professional_information.
Вот мой код:< /p>
from flask_admin.model.fields import AjaxSelectField
from flask_admin.model.ajax import AjaxModelLoader, DEFAULT_PAGE_SIZE

from ..models import *

class CityAjaxModelLoader(AjaxModelLoader):
def __init__(self, name, **options):
super(CityAjaxModelLoader, self).__init__(name, options)

def format(self, model):
if model is None:
return None
return (model.id, repr(model))

def get_one(self, pk):
return session.query(City).get(pk)

def get_list(self, query, offset=0, limit=DEFAULT_PAGE_SIZE):
search_term = query.strip().lower()
return session.query(City).filter(City.label.ilike(f"%{search_term}%")).offset(offset).limit(limit).all()

class PrinterView(GlobalModelView):

# ...

form_columns = [
"lastname",
"firstnames",
"birth_date",
"birth_city_label",
"birth_city_id",
"personal_information",
"professional_information",
]

form_ajax_refs = {
'birth_city_id': CityAjaxModelLoader('birth_city_id')
}

def scaffold_form(self):
form_class = super(PrinterView, self).scaffold_form()
form_class.birth_city_id = AjaxSelectField(
CityAjaxModelLoader('birth_city_id'),
label='Birth City (reference)',
blank_text="Select a city..."
)
# reorder fields ?
return form_class

Полеbirth_city_id всегда размещается в конце формы, даже если я явно включаю его в список form_columns (я ожидал принудительного расположения полей вот так, но это ничего не меняет).
Хотелось бы знать:
  • Есть ли способ изменить порядок полей с помощью метода scaffold_form?

    Есть ли лучшая стратегия для интеграции селектора Ajax с сохранением
    порядка полей в форме?
Заранее спасибо за помощь!
[Обновление 1]
Мой Модель человека (связанная с PrinterView) имеет отношениеbirth_cities, связанное с birth_city_id внешний ключ. Вот соответствующая часть определения модели:
class Person(AbstractVersion):
__tablename__ = "persons"
id = Column(Integer, primary_key=True, autoincrement=True, nullable=False, unique=True)
birth_city_id = Column(Integer, ForeignKey("cities.id"), nullable=True, unique=False)

# Relations
birth_cities = relationship("City", foreign_keys=[birth_city_id], back_populates="persons")

class City(AbstractVersion):
__tablename__ = "cities"
id = Column(Integer, primary_key=True, autoincrement=True, nullable=False, unique=True)

# Relations
persons = relationship("Person", back_populates="birth_cities")


Подробнее здесь: https://stackoverflow.com/questions/793 ... h-scaffold
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»