最初のオブジェクトをコレクションに保存しようとしています (最初のオブジェクトであることを確認するために db.connection.drop_database() を実行しました) が、*** NotUniqueError: Tried to save duplicate unique keys
エラーが発生し続けます。
これが私が得るものの簡単な例です:
ipdb> Card.objects.all()
[]
ipdb> card
`<Card: <Card url/pk: c569e1c9-7311-441e-ba03-0e86d4bc2932>>`
ipdb> card.save()
*** NotUniqueError: Tried to save duplicate unique keys (E11000 duplicate key error index: contacts.dav_object.$username_1 dup key: { : null })
ipdb> Card.drop_collection()
ipdb> card.save()
`<Card: <Card url/pk: c569e1c9-7311-441e-ba03-0e86d4bc2932>>`
ipdb>
私は UnitTest を使用していますが、setUp
メソッドにはCard.ensure_indexes()
. 何か関係があるのではないかと思いますが、この行がないと、モデル定義にunique=True
.
Card._collection.drop_indexes()
この問題が解決した後に追加するCard.ensure_indexes()
と、上記のようにエントリが重複します。
カードモデルは次のとおりです。
class Card(DavObject):
addressbook = db.ReferenceField("Addressbook")
url = db.StringField(required=True, unique=True, unique_with=["addressbook", "url"])
active = db.BooleanField(default=True)
text = db.StringField(required=True)
DavObject は次のとおりです。
class DavObject(db.Document):
meta = {
'allow_inheritance': True,
}
last_update = db.ComplexDateTimeField(required=True, default=datetime.utcnow)
def __unicode__(self):
return u"<%s url/pk: %s>" % (self.__class__.__name__, getattr(self, "url", self.pk))
def save(self, *args, **kwargs):
if self._get_changed_fields():
self.last_update = datetime.utcnow()
return db.Document.save(self, *args, **kwargs)
何が悪いのかわかりません。
私はmongoengine 0.8.3、フラスコ0.10.1、およびpython 2.7.3を使用しています。