3

mongoengine をアップグレードしたところ、エラーが発生しました。現在、モデルは次のように定義されています。

class Descriptor(Document):
    root = ReferenceField(DescriptorNode, required=True)
    (..)

class DescriptorNode(Document):
    channel = ReferenceField(Channel, required=True)
    (..)

class Channel(Document):
    (..)

を使用するDBRef = Trueと、これは mongoengine==0.7.10 で使用した現在のコードです。

descriptor =  Descriptor.objects.get(id = xxxx)
channel = descriptor.root.channel

DBRef = Truemongoengine==0.8.1 に移行してからデータベースを再構築するために、削除することにしました。

今、私はこのエラーが発生しています:

channel = descriptor.root.channel
AttributeError: channel
/site-packages/bson/dbref.py Line:88

を試しselect_related()ましたが、何も正しく動作していないようです。

記述子:

{
    "_id" : ObjectId("51ae3f6ba2aa1c0a32998952"),
    "created_date" : ISODate("2013-06-04T19:26:35.630Z"),
    "modified_date" : ISODate("2013-06-05T12:45:55.570Z"),
    "sequence" : 843174,
    "groups" : [ ],
    "name" : "desktop-BR",
    "root" : ObjectId("51ae3f6ba2aa1c0a329988b0"),
    "tree_hash" : "97e3716db74543e66a11405e9e04185452183ac1"
}

DescriptorNode :

{
    "_id" : ObjectId("51ae3f6aa2aa1c0a3299885a"),
    "channel" : ObjectId("51ae0f06a2aa1c0a327f3958"),
    "created_date" : ISODate("2013-06-04T19:26:34.235Z"),
    "groups" : [ ],
    "is_prioritized" : false,
    "is_published" : true,
    "modified_date" : ISODate("2013-06-05T12:46:02.704Z"),
    "order" : 0,
    "sequence" : 842926
}
4

2 に答える 2

3

例と同じようにしましたか?

まず、に変更DBRef = TrueDBRef = Falseます。次に、手動で移行するには:

for d in Descriptor.objects():
    d.root = d.root
    d.save()

for d in DescriptorNode.objects():
    d.channel = d.channel
    d.save()
于 2013-06-04T22:43:26.637 に答える