2012-07-17 108 views
3

我有一些非常簡單的代碼:mongoengine ListField(ReferenceField())和定製primary_key

from mongoengine import * 

class Comment(Document): 
    id = IntField(primary_key=True) 
    text = StringField() 

class Message(Document): 
    id = IntField(primary_key=True) 
    comments = ListField(ReferenceField(Comment)) 

connect('test_db') 

c1 = Comment(id=1) 
c1.text = 'message_one' 
c1.save() 

c2 = Comment(id=2) 
c2.text = 'message_two' 
c2.save() 

m = Message(id=1) 
m.comments = [c1, c2] 
m.save() 

msg = Message.objects.get(id=1) 
for comment in msg.comments: 
    print comment.id, comment.text 

我預計它會打印

1 message_one

2 message_two

但我有

1 message_one

1 message_one

當我使用任何MongoDB的管理界面,查看數據庫中的一切似乎是確定:

{ 「_cls」: 「消息」, 「_id」:1,「_types」:[「Message」],

「comments」:[{「$ ref」:「comment」,「$ id」:1},{「$ ref」:「評論「,」$ id「:2}]}

我試圖交換c1和c2中的代碼(例如使用m.comments = [C2,C1])和出乎意料地我已經得到正確的輸出:

2 message_two

1 message_one

而且我試着不使用自定義主鍵「ID」,並在這兩種情況下,一切工作正常。

我對這個bug非常困惑,看起來它與mongoengine有什麼不對,或者我沒有以正確的方式使用它。請有任何想法?

回答

3

解除引用中存在一個錯誤,並在0.6.15中修復 - 請升級!

相關問題