Какая ошибка в моем проекте?

Я использую mongodb для своего проекта python (2.7) с фреймворком django.

Creating tables ...  
Traceback (most recent call last):
  File "manage.py", line 14, in <module>
    execute_manager(settings)   
  File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 438, in execute_manager 
    utility.execute()  
  File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)  
  File "/usr/lib/pymodules/python2.7/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)  
  File "/usr/lib/pymodules/python2.7/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/usr/lib/pymodules/python2.7/django/core/management/base.py", line 351, in handle
    return self.handle_noargs(**options)
  File "/usr/lib/pymodules/python2.7/django/core/management/commands/syncdb.py", line 109, in handle_noargs
    emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "/usr/lib/pymodules/python2.7/django/core/management/sql.py", line 190, in emit_post_sync_signal
    interactive=interactive, db=db)  
  File "/usr/lib/pymodules/python2.7/django/dispatch/dispatcher.py", line 172, in send
    response = receiver(signal=self, sender=sender, **named)  
  File "/usr/lib/pymodules/python2.7/django/contrib/auth/management/__init__.py", line 41, in create_permissions
    "content_type", "codename"  
  File "/usr/lib/pymodules/python2.7/django/db/models/query.py", line 107, in _result_iter
    self._fill_cache()  
  File "/usr/lib/pymodules/python2.7/django/db/models/query.py", line 772, in _fill_cache
    self._result_cache.append(self._iter.next())
  File "/usr/lib/pymodules/python2.7/django/db/models/query.py", line 959, in iterator
    for row in self.query.get_compiler(self.db).results_iter():
  File "/usr/local/lib/python2.7/dist-packages/djangotoolbox/db/basecompiler.py", line 229, in results_iter
    for entity in self.build_query(fields).fetch(low_mark, high_mark):
  File "/usr/local/lib/python2.7/dist-packages/djangotoolbox/db/basecompiler.py", line 290, in build_query
    query.order_by(self._get_ordering())
  File "/usr/local/lib/python2.7/dist-packages/djangotoolbox/db/basecompiler.py", line 339, in _get_ordering
    raise DatabaseError("Ordering can't span tables on non-relational backends (%s)" % order)

а также

django.db.utils.DatabaseError: Ordering can't span tables on non-relational backends (content_type__app_label)

Как решить эту проблему?


person BobDroid    schedule 17.04.2012    source источник
comment
совершенно ясно, initdb пытается выполнить запрос, подобный объединению, используя mongo :)   -  person Tommaso Barbugli    schedule 17.04.2012


Ответы (2)


Вам нужно использовать Django-nonrel вместо Django.

person Jonas H.    schedule 17.04.2012
comment
@Jonas.H: Есть ли какое-нибудь простое руководство по установке и использованию django-nonrel... А также в чем разница между django-nonrel и django?? - person BobDroid; 18.04.2012
comment
allbuttonspressed.com/projects/django-nonrel После прочтения этой страницы MongoDB конкретные инструкции можно найти на странице django-mongodb.org. - person Jonas H.; 18.04.2012
comment
Для всех, кто запутался, Django-nonrel — это разветвленная версия Django. - person ; 02.08.2014

Я использовал mongoengine с django, но вам нужно создать файл, например, mongo_models.py. В этом файле вы определяете свои документы Mongo. Затем вы создаете формы, соответствующие каждому документу Mongo. Каждая форма имеет метод сохранения, который вставляет или обновляет то, что хранится в Mongo. Формы Django предназначены для подключения к любой серверной части данных (с небольшим количеством ремесла).

ВНИМАНИЕ: если у вас есть очень хорошо определенные и структурированные данные, которые можно описать в документах или моделях, не используйте Mongo. Он не предназначен для этого, и что-то вроде PostGreSQL будет работать намного лучше.

  • Я использую PostGreSQL для реляционных или хорошо структурированных данных, потому что он хорош для этого. Небольшой объем памяти и хороший отклик.
  • Я использую Redis для кэширования или работы с очередями/списками памяти, потому что он очень хорош для этого. отличная производительность, если у вас есть память, чтобы справиться с этим.
  • Я использую Mongo для хранения больших документов JSON и для выполнения Map и уменьшения их (при необходимости), потому что это очень хорошо для этого. Обязательно используйте индексацию для определенных столбцов, если это возможно, чтобы ускорить поиск.

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

Я видел слишком много сообщений, в которых кто-то хотел поменять реляционную БД на Mongo, потому что Mongo — модное слово. Не поймите меня неправильно, Mongo действительно великолепен... когда вы используете его по назначению. Я люблю правильно использовать Mongo

person nialloc    schedule 17.04.2012