Поле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