Django + MongoDB с использованием mongodb-движка дает многократный возврат - PullRequest
1 голос
/ 09 июля 2011

при доступе к localhost: 8000 / администратор выдает ошибку 'MultipleObjectsReturned в / admin / get () вернул более одного сеанса - он возвратил 2! Параметры поиска: {'session_key': 'ee5a8be487352e42a89f962ee4ab22a6', 'expire_date__gt': datetime.datetime (2011, 7, 8, 5, 38, 36, 645053)} '

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

обновление: даже в браузере я удалил cookie, в котором хранился идентификатор сессии, после чего я смог гладко запустить страницу. затем, когда я обновляю или нажимаю на ссылку, я получаю ошибку с несколькими объектами.

это проблема с механизмом mongodb для django, который пытается добавлять идентификаторы сеанса для каждого обновления страницы.

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Я связался с автором, ответственным за django-mongodb-engine, который пропустил добавление библиотек django.contrib (в него входит административная библиотека django.) Он добавил исправление, с помощью которого теперь вы можете получить доступ к админке, не получая многократную ошибку.

это коммит, который решает проблему (https://github.com/django-mongodb-engine/mongodb-engine/issues/53): https://github.com/django-mongodb-engine/mongodb-engine/commit/a0ab9c3f7c378828c2800b8f62f67c8e21255835

Надеюсь, это поможет кому-то еще.

1 голос
/ 10 июля 2011

По умолчанию MongoDB создает уникальный индекс в поле _id.Однако похоже, что вы используете поле session_key, которое не является уникальным по умолчанию, что может объяснить, как вы получаете две записи.

Посмотрите на используемые индексы: ./mongo localhost:8000/admin --eval "db.system.indexes.find()" и посмотрите, не проблема ли это с индексом.Информация о создании уникальных индексов: здесь .

Вы также можете взглянуть на код, который создает документы django_session.Возможно, они делают что-то «не совсем правильное», что вызывает ошибку.

...