Форма с флажками, получая все отмеченные флажки

Обновление: благодаря Lo-Tan для предложения использования метода to_mongo().

В конце концов я придумал следующее решение:

from json import JSONEncoder

from mongoengine.base import BaseDocument


class MongoEncoder(JSONEncoder):
    def default(self, o):
        if isinstance(o, BaseDocument):
            data = o.to_mongo()
            # might not be present if EmbeddedDocument
            o_id = data.pop('_id', None)
            if o_id:
                data['id'] = str(o_id['$oid'])
            data.pop('_cls', None)
            return data
        else:
            return JSONEncoder.default(self, o)


# consider `obj` to be MongoEngine object
json_data = json.dumps(obj, cls=MongoEncoder)

Он использует метод to_json(), добавленный как ответ на вышеупомянутую проблему .

0
задан WesleytJ 11 March 2019 в 13:41
поделиться

2 ответа

<input type="checkbox" name="participants"

Эта строка является корнем ваших проблем.

Поскольку каждый флажок имеет одно и то же имя, значение [110]

Эта строка является корнем ваших проблем.

Поскольку каждый флажок имеет одно и то же имя, значение [112] переопределяется для каждого флажка в списке.

Если вы измените этот фрагмент на:

<input type="checkbox" name="participants[]"

, то [110]

Эта строка является корнем ваших проблем.

Поскольку каждый флажок имеет одно и то же имя, значение [112] переопределяется для каждого флажка в списке.

Если вы измените этот фрагмент на:

[111]

, то [113] станет массивом всех проверенных значений.

POST['participants']
станет массивом всех проверенных значений.

POST['participants']
переопределяется для каждого флажка в списке.

Если вы измените этот фрагмент на:

[111]

, то [110]

Эта строка является корнем ваших проблем.

Поскольку каждый флажок имеет одно и то же имя, значение [112] переопределяется для каждого флажка в списке.

Если вы измените этот фрагмент на:

[111]

, то [113] станет массивом всех проверенных значений.

POST['participants']
станет массивом всех проверенных значений.

0
ответ дан Scoots 11 March 2019 в 13:41
поделиться

Вам нужно несколько значений флажков.

И, следовательно, HTML-имя ввода должно быть кратным (массив)

<input type="checkbox" name="participants" будет возвращать строку, только последнее переданное значение.

<input type="checkbox" name="participants[]" вернет массив всех отправленных значений.

Таким образом, замена name="participants" на name="participants[]" будет работать.

0
ответ дан Pupil 11 March 2019 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: