2015-02-24 1 views
0

Моя модель - это диктофон такого рода: {"category": category, "dish_name": dish_name, "index": index} (индекс используется только для принудительного отображения продуктов в определенном порядке)Невозможно настроить edit_form Flask-Admin: TypeError: edit_form() получил неожиданный аргумент ключевого слова 'obj'

В 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» вообще не кажется неожиданным ...

ответ

1

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

def edit_form(self, obj): 

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