Невозможно настроить edit_form Flask-Admin: TypeError: edit_form() получил неожиданный аргумент ключевого слова «obj»

Моя модель - это дикт такого рода: {"category":category, "dish_name":dish_name, "index": index} (индекс используется только для того, чтобы продукты отображались в определенном порядке)

В Flask-Admin я пытаюсь настроить его форму, чтобы иметь возможность изменить категорию продукта из раскрывающегося списка моих категорий (еще одна коллекция mongodb). Мне предлагается текстовое поле с именем и пустым полем выбора. Я думаю, это потому, что модель на самом деле не содержит всех категорий, поэтому форма «не знает», что отображать.

Затем я попытался переопределить edit_form(), чтобы принудительно отображать список категорий в форме следующим образом:

def edit_form(self, model):
    try:
        pk = self.get_pk_value(model)
        if not pk:
            raise ValueError('Document does not have _id')
        choices = list(db.db.categories.find())
        choices.sort(key=lambda x: x['order'])
        sorted_choices = [(cat['name'], cat['name']) for cat in choices]
        model['category'] = sorted_choices
        return super(MyModelView, self).edit_form(model)
    except Exception as ex:
        flash(gettext('Failed to edit product. %(error)s', error=str(ex)),
              'error')
        return False

Но я получаю эту ошибку:

 File "C:\Python27\lib\site-packages\flask_admin\model\base.py", line 1264, in edit_view
form = self.edit_form(obj=model)
TypeError: edit_form() got an unexpected keyword argument 'obj'

Что меня очень сбивает с толку, поскольку аргумент obj совсем не кажется неожиданным...


person Luca Brozzi    schedule 24.02.2015    source источник


Ответы (1)


Просто предположение: flask-admin вызывает функцию edit_form с именованной ключевой переменной obj, в то время как вы назвали ее model. Вот почему для вашей версии edit_form переменная obj является "неожиданной". Попробуйте изменить сигнатуру вашей функции на

def edit_form(self, obj):

а также изменить model на obj в теле функции, это поможет?

person PiQuer    schedule 18.07.2015