Обновление: благодаря 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()
, добавленный как ответ на вышеупомянутую проблему .
<input type="checkbox" name="participants"
Эта строка является корнем ваших проблем.
Поскольку каждый флажок имеет одно и то же имя, значение Эта строка является корнем ваших проблем. Поскольку каждый флажок имеет одно и то же имя, значение [112] переопределяется для каждого флажка в списке. Если вы измените этот фрагмент на: , то Эта строка является корнем ваших проблем. Поскольку каждый флажок имеет одно и то же имя, значение [112] переопределяется для каждого флажка в списке. Если вы измените этот фрагмент на: , то [113] станет массивом всех проверенных значений. [110]
переопределяется для каждого флажка в списке. <input type="checkbox" name="participants[]"
[110]
станет массивом всех проверенных значений.
Если вы измените этот фрагмент на:
[111], то Эта строка является корнем ваших проблем. Поскольку каждый флажок имеет одно и то же имя, значение [112] переопределяется для каждого флажка в списке. Если вы измените этот фрагмент на: , то [113] станет массивом всех проверенных значений. [110]
станет массивом всех проверенных значений.
Вам нужно несколько значений флажков.
И, следовательно, HTML-имя ввода должно быть кратным (массив)
<input type="checkbox" name="participants"
будет возвращать строку, только последнее переданное значение.
<input type="checkbox" name="participants[]"
вернет массив всех отправленных значений.
Таким образом, замена name="participants"
на name="participants[]"
будет работать.