Как структурировать данные формы в MongoDB (Python / Flask) - PullRequest
0 голосов
/ 12 декабря 2018

У меня проблемы с структурированием моих данных в MongoDB из пользовательских форм.

Моя идеальная структура документа выглядит следующим образом:

enter image description here

Как вы можете видеть, ингредиенты находятся в массиве, который будет повторяться.

Однако я не могу найти способ при отправке моей формы сделать это.Моя форма для раздела ингредиентов выглядит так:

 <h4>Ingredients</h4>
        </div>
        <div class="row">
            <div class="input-field col s6">
                <input id="ingredients_1_name" name="ingredients_name_1" type="text" class="validate" required>
                <label for="ingredients_1_name">Ingredient</label>
            </div>
            <div class="input-field col s3">
                <input id="ingredients_1_quantity" name="ingredients_quantity_1" type="text" class="validate" required>
                <label for="ingredients_1_quantity">Quantity</label>
            </div>
            <div class="input-field col s3">
                <input id="ingredients_1_unit" name="ingredients_unit_1" type="text" class="validate" required>
                <label for="ingredients_1_unit">Unit</label>
            </div>
        </div>

Пользователь может нажимать кнопку JavaScript, которая добавляет новую строку с именем "ингридиенты_2_имя" и так далее.Это приводит к очень неструктурированной БД:

enter image description here

Это, очевидно, беспорядок, который, когда дело доходит до использования данных, требует ненужного количества манипуляций.

Не могу найти в Интернете никакой информации о том, как отправить данные из HTML-формы в MongoDB определенным способом.

В настоящее время при отправке формы вид выглядит следующим образом:

@app.route('/insert_recipe/', methods=['GET','POST'])
def insert_recipe():
    """
    This function is called when a user clicks the submit button on the add
    recipe form. Uses the insert_one() method to add to the recipes document.
    """
    recipes = mongo.db.recipes
    dictionary = recipes.insert_one(request.form.to_dict())
    return redirect(url_for("get_recipes"))

Это просто принимает имена ввода в качестве ключей и вводимые пользователем значения.

Кто-нибудь может описать, как я могу хранить данные формы в MongoDB в структурированном виде?

1 Ответ

0 голосов
/ 13 декабря 2018

То, что вам требуется, - это преобразовать простой запрос HTML-формы-публикации в JSON-подобную структуру без каких-либо манипуляций с данными.Я очень сомневаюсь, что это даже возможно, потому что JSON-объекты используют вложенные данные, а ключ / индексный подход для доступа к ним и данным HTML-формы-публикации равен flat и следует уникальному идентификатору.-подход к его данным.Я вижу 2 возможных решения:

  1. Используйте библиотеку сериализации WTForms, которая будет выполнять преобразование python-data -> html-form -> python-data для вас, и вам не придется делать ненужное количество манипуляций самим.
  2. Создайте запрос веб-страницы (переднего плана) для вас как JSON-объект.
...