mongoengine ListField (ReferenceField ())и пользовательский первичный ключ _

У меня есть довольно простой код:

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" : "Message", "_id" : 1, "_types" : [ "Message"],

"comments" : [ { "$ref" : "comment", "$id" : 1}, { "$ref" : "comment", "$id" : 2}]}

Я пытался поменять местами c1 и c2 в коде (, например, использовать m.comments = [c2, c1] ), и неожиданно я получил правильный вывод:

2 message_two

1 message_one

Также я пытался не использовать пользовательский первичный ключ «id», и в обоих случаях все работало правильно.

Я очень смущен этой ошибкой, кажется, что-то не так с mongoengine или я использую его неправильно. Пожалуйста, есть идеи?

5
задан alex_smirnov 17 July 2012 в 16:12
поделиться