Форма для редактирования колбы отправить Трюбель - PullRequest
0 голосов
/ 20 января 2019

Объекты

class MyObj:    
    def __init__(self, data_dict):
        self.id = ''
        self.name = ''
        self.minDescription = ''
        self.descriptions = ''

class MyObjForm(Form):
    name = StringField('name')
    minDescription = StringField('minDescription')
    descriptions = TextAreaField('descriptions')

* 1004 Технологические карты *

Это хорошая работа в режимах "POST" и "GET". Кнопка «Отправить» имеет хорошие реакции при нажатии.

@app.route("/create", methods=["GET", "POST"])
@login_required
def create():
    if request.method == 'POST':
        form = MyObjForm(request.form)
        if form.validate():
            new_obj = MyObj(request.form)
            return redirect(url_for("/"))
        else:
            return render_template('create.html', form=form)
    else:
        return render_template('create.html', form=MyObjForm())

Когда я перехожу в режим «GET», мой код работает хорошо, и у просмотра старые данные объекта, но нажатие на кнопку «Отправить» не вызывает никаких реакций.

@app.route("/edit/<id>", methods=["GET", "POST"])
@login_required
def edit(id):
    if request.method == 'GET':
        old_obj = d.get_by_id(id)
        form = MyObjForm(obj=old_obj)
        return render_template('create.html', form=form, id=id)
    else:
        #never entry
        pass

HTML 'create.html'

<form method="post" role="form">
    {{ form.csrf }}
    {{ macros.render_field(form.name) }}
    {{ macros.render_field(form.minDescription) }}
    {{ macros.render_field(form.descriptions) }}
    <input class="btn special" type="submit" value="Save"/>
</form>

Я пытаюсь это:

<form method="post" role="form" action="{{ url_for('edit', id=id) }}">

и это:

class MyObjForm(Form):    
id = StringField()

нет прогресса: (

Что не так?

1 Ответ

0 голосов
/ 23 января 2019

Я определил проблему:

  1. Если не использовать аргументы ('obj = new_obj'), когда MyObjForm создает кнопку сохранения, также вызовите мой маршрут в режиме записи

  2. Когда я опубликовал вопрос, слишком упростил описание проблемы. Действительно MyObjForm включает BooleanField:

    class MyObjForm(Form): name = StringField('name') minDescription = StringField('minDescription') descriptions = TextAreaField('descriptions') isArchive = BooleanField('Is not public')

  3. Я не заметил, чтобы флажок перестал отображаться в форме по неизвестным мне причинам. Для вывода использовался стандартный метод рендеринга:

    {{ macros.render_field2(form.isArchive) }}<br> {% macro render_field2(field) %} {{ field.label }} {{ field(**kwargs)|safe }} {% if field.errors %} {% for error in field.errors %} {{ error }} {% endfor %} {% endif %} {% endmacro %}

  4. Для решения проблемы с визуализацией применено следующее:

    <input type="checkbox" id="isArchive" name="isArchive"> <label for="isArchive">{{ form.isArchive.label }}</label> {% for error in form.isArchive.errors %} <li><font color="red">{{ error }}</font></li> {% endfor %}

  5. И последнее. Не заметил как, но форма также перестала работать, когда вы добавляете объект, больше не проходите проверку. И причина была {{ form.csrf }}}, которую пришлось заменить на {{ form.csrf_token() }}. Еще пришлось удалить параметры проверки для BooleanField.

Теперь проблема частично решена. Я связываю эти проблемы с установкой компонента безопасности фляги. К сожалению, я не смог сделать нормальное отображение флажка, но по крайней мере я могу двигаться дальше.

Если кто-нибудь знает, как эти вещи могут быть связаны друг с другом или в чем я не прав, пожалуйста, дайте мне знать. Я не хочу оставлять пробелы в знаниях.

...