У меня есть довольно простой код:
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 или я использую его неправильно. Пожалуйста, есть идеи?