1

この公式チュートリアルに従って、私はこれをコーディングしました:

#! /usr/bin/env python

from mongoengine import *

connect('tumbleblog')


class User(Document):
  email = StringField(required=True)
  first_name = StringField(max_length=50)
  last_name = StringField(max_length=50)

class Comment(EmbeddedDocument):
  content = StringField()
  name = StringField(max_length=120)

class Post(Document):
  title = StringField(max_length=120, required=True)
  author = ReferenceField(User, reverse_delete_rule=CASCADE)
  tags = ListField(StringField(max_length=30))
  comments = ListField(EmbeddedDocumentField(Comment))

class TextPost(Post):
  content = StringField()

class ImagePost(Post):
  image_path = StringField()

class LinkPost(Post):
  link_url = StringField()


john = User(email="example@gmail.com",first_name='john', last_name='doe')
john.save()

しかし、実行しようとすると、次のように表示される理由がわかりません。

/Library/Python/2.7/site-packages/mongoengine/fields.py:736: FutureWarning: ReferenceFields will default to using ObjectId  strings in 0.8, set DBRef=True if this isn't desired
  warnings.warn(msg, FutureWarning)
/Library/Python/2.7/site-packages/mongoengine/base.py:589: FutureWarning: TextPost uses inheritance, the default for allow_inheritance is changing to off by default. Please add it to the document meta.
  FutureWarning
/Library/Python/2.7/site-packages/mongoengine/base.py:589: FutureWarning: ImagePost uses inheritance, the default for allow_inheritance is changing to off by default. Please add it to the document meta.
  FutureWarning
/Library/Python/2.7/site-packages/mongoengine/base.py:589: FutureWarning: LinkPost uses inheritance, the default for allow_inheritance is changing to off by default. Please add it to the document meta.
  FutureWarning
[Finished in 0.2s]

どこで間違ったのですか?私は公式のチュートリアルに従いました..私は何かを逃しましたか?

PS Mongodb は稼働中です

4

3 に答える 3

3

将来の警告は、MongoEngine の将来のバージョンでの変更を警告するもので、アップグレードする前に対処する必要があります。

警告は次のとおりです。

0.8 では、ReferenceFields はデフォルトで ObjectId 文字列を使用します。これが望ましくない場合は、DBRef=True を設定します。

つまり、データを変更して移行したくない場合は、定義を次のように変更する必要があります。

ReferenceField(User, dbref=False)  # Uses the original way of storing dbrefs
ReferenceField(User, dbref=True)   # Uses a simpler way of storing dbrefs
于 2012-11-05T08:26:47.123 に答える
1

この警告が気に入らない場合は、Post を次のようにすることができます。

class Post(Document):
    meta = {'allow_inheritance': True}
    ...
    author = ReferenceField(User, reverse_delete_rule=CASCADE, dbref=False)
    ...

詳細については、 http://mongoengine-odm.readthedocs.org/en/latest/upgrade.htmlおよびhttps://github.com/hmarr/mongoengine/issues/437を参照してください。

于 2012-11-04T15:24:45.087 に答える
1

あなたのコードは、定義される前にコメントを使用しています。Python では順序が重要です。

たとえば、https://stackoverflow.com/a/2985085/1256394を参照してください。

于 2012-11-04T14:48:37.010 に答える