1

MongoDB を Django と連携させようとして、悪夢にうなされていました。正常にインストールされましたが、最初にオブジェクトを保存しようとするとエラーになります。私はこのチュートリアルに従い、彼らが提示する Post モデルを正確にコピーしました。

モデルのコードは次のとおりです。

from django.db import models
from djangotoolbox.fields import ListField

class Post(models.Model):
    title = models.CharField(max_length=200)
    text = models.TextField()
    tags = ListField()
    comments = ListField()

投稿は実際にここで作成 (および挿入) されます。

post = Post.objects.create(
...     title='Hello MongoDB!',
...     text='Just wanted to drop a note from Django. Cya!',
...     tags=['mongodb', 'django'],
...     comments=['comment 1', 'comment 2']
... ) 

完全なスタック トレースはここにあります。エラー自体は次のとおりです。

InvalidDocument: documents must have only string keys, key was <django.db.models.fields.CharField object at 0x22cae50>

MongoDB はキーを整数ではなく文字列にする必要があるため、明らかに機能しています。しかし、なぜラム酒はなくなったのですか?標準の Django オブジェクトを MongoDB データベースに保存できないのはなぜですか?

見落とされていた必須の CharField パラメータ max_length を追加しました。この場合は機能しません。また、リストも削除しても機能しません。

4

4 に答える 4

1

私もこのチュートリアルに従いましたが、同じエラーが発生しました。私はなんとかこの問題を修正することができました。私が間違っていたのは、バージョン0.9.2であるgithub(https://github.com/django-nonrel/djangotoolbox)リポジトリのdjangotoolboxを使用したことです。次に、これを削除してチュートリアルの状態として実行し、djangotoolboxのバージョン0.9.1にあるbitbucket(https://bitbucket.org/wkornewald/djangotoolbox)を使用しました。今では正常に動作します。

于 2012-09-03T19:29:18.947 に答える
1

github リポジトリの「develop」ブランチで django-mongodb-engine ライブラリを現在のバージョンに更新するまで、このエラーが発生しました。表示されている記事の手順を使用するだけで、マスター ブランチがインポートされます。

于 2012-07-16T10:15:45.680 に答える
0

私が見るところ、あなたのモデルはうまく見えます。エラーはおかしいです。「タイトル」と呼んでいる属性のキーは文字列以外にはなり得ないと言っていますが、私が間違っていなければ、ここの文字列はキー「タイトル」であり、値はCharField()フィールドです。 、MongoDBのPostドキュメントでキーと値のペアを一緒に表します。djangoシェルにジャンプして、問題を切り分けてみてください。

python manage.py shell

Postオブジェクトを最初から作成します。dragonxが言及したモデルを使用してください。これらの問題をデバッグするには、Simpleが最適です。Postオブジェクトpに対してPost.objects.create(p)を呼び出そうとしたとき、またはp.save()を呼び出したときに同じエラーが発生する場合は、Postモデルを書き直して、別のショットを与えてみてください。

最後に、settings.pyファイルを表示して、mongodb設定が何であるかを確認できます。django-nonrelを使用していると言う場合は、python、django、mongodbが相互に通信していることを確認するための基本的なチェックがあります。

あなたのやり方を教えてください。

于 2012-06-11T19:02:02.017 に答える
0

これは機能しますか:

post = Post(
...     title='Hello MongoDB!',
...     text='Just wanted to drop a note from Django. Cya!',
...     tags=['mongodb', 'django'],
...     comments=['comment 1', 'comment 2']
... ) 

試してみる別のこと:

class Post(models.Model):
    title = models.CharField(primary_key=True, max_length=200)

デフォルトでは、Django は自動生成された数値を主キーとして使用していると思います。これにより、タイトルが主キーになります...これは文字列であるため、表示されている問題を解決できる可能性があります。あなたが見ている実際のエラーは私にはあまり意味がないので、それは単なる推測です.

于 2012-04-16T00:48:04.943 に答える