Мой вопрос может быть таким же, как этот, но предложенный ответ, похоже, не помог (или я не понял его правильно): Пилоны FormEncode @validate передают параметры в действие повторной визуализации
У меня есть простая форма, которая принимает требуемое значение строки запроса (id), использует ее в качестве скрытого значения поля формы и проверяет опубликованные данные.Контроллер выглядит так:
class NewNodeForm(formencode.Schema):
parent_id = formencode.validators.Int(not_empty = True)
child_name = formencode.validators.String(not_empty = True)
def newnode(self, id):
c.parent_id = id
return render('newnode.html')
@validate(schema=NewNodeForm(), form='newnode')
def createnode(self):
parentId = self.form_result.get('parent_id')
childName = self.form_result.get('child_name')
nodeId = save_the_data(parentId, childName)
return redirect_to(controller = 'node', action = 'view', id = nodeId)
и форма очень проста:
<form method="post" action="/node/createnode">
<input type="text" name="child_name">
<input type="hidden" value="${c.parent_id}" name="parent_id">
<input name="submit" type="submit" value="Submit">
</form>
Все работает нормально, если проверка прошла успешно, но если она не пройдена, newnode
не можетбыть вызванным, потому что id
не передается обратно.Это бросает TypeError: newnode() takes exactly 2 arguments (1 given)
.Простое определение как newnode(self, id = None)
обходит эту проблему, но я не могу этого сделать, поскольку логика требует идентификатор.
Это кажется таким простым, но чего я упускаю?