0

djangoフレームワークを使用してpython(2.7)プロジェクトにmongodbを使用しています。pythonmanage.pyrunserverを指定すると機能しますが、db(python manage.py syncdb)を同期すると、ターミナルに次のエラーが表示されます。

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)

この問題を解決する方法は?

4

2 に答える 2

4

Djangoの代わりにDjango-nonrelを使用する必要があります。

于 2012-04-17T18:57:13.997 に答える
2

私はdjangoでmongoengineを使用しましたが、たとえばmongo_models.pyのようなファイルを作成する必要があります。そのファイルで、Mongoドキュメントを定義します。次に、各Mongoドキュメントに一致するフォームを作成します。各フォームには、Mongoに保存されているものを挿入または更新するsaveメソッドがあります。Djangoフォームは、任意のデータバックエンドにプラグインするように設計されています(少し手間がかかります)

注意:ドキュメントやモデルで記述できる非常に明確に定義され構造化されたデータがある場合は、Mongoを使用しないでください。そのために設計されたものではなく、PostGreSQLのようなものの方がはるかにうまく機能します。

  • 私はPostGreSQLをリレーショナルデータまたは適切に構造化されたデータに使用しています。小さなメモリフットプリントと良好な応答。
  • 私はRedisを使用して、メモリキュー/リストをキャッシュまたは操作します。これは、Redisに非常に適しているためです。あなたがそれに対処するためのメモリを持っていることを提供する素晴らしいパフォーマンス。
  • 私はMongoを使用して大きなJSONドキュメントを保存し、Mapを実行して(必要に応じて)それらを削減します。これは非常に優れているためです。ルックアップを高速化できる場合は、必ず特定の列にインデックスを使用してください。

四角い穴を埋めるために丸を付けないでください。それはそれを埋めません。

Mongoは流行語であるため、誰かがリレーショナルDBをMongoに交換したいと思った投稿をたくさん見ました。誤解しないでください、Mongoは本当に素晴らしいです...適切に使用すると。Mongoを適切に使用するのが大好きです

于 2012-04-17T09:45:42.577 に答える