对包含ReferenceField的ListField进行排序(Mongoengine)

时间:2018-10-15 09:04:10

标签: python mongoengine

我有两个声明如下的类:

from mongoengine import Document, fields, DynamicDocument

class Booking(DynamicDocument):
    booking_id=fields.StringField(required=True)
    pickup_timestamp=fields.DateTimeField()

class Assignment(Document):
    created_timestamp=fields.DateTimeField(default=datetime.datetime.utcnow)
    pickup_time=fields.DateTimeField()
    bookings=fields.ListField(fields.ReferenceField(Booking))

我的应用程序允许用户通过从UI的列表中选择“预定”对象,从而将“预定”放在一起。 创建分配对象时,我会自动将“拾取时间”设置为“预订” pickup_timestamp中的最小值,就像这样-

assignment.pickup_time = min([booking.pickup_timestamp for booking in assignment.bookings])

但是,我还需要根据最早的Booking对象中的其他字段在赋值对象上设置其他属性。 我的问题-有没有一种方法可以通过引用对象上的字段对包含ReferenceFields的ListField进行排序?

我确实找到了this的答案,但是它没有谈论ListField中的ReferenceFields。试图将字段类型也设置为SortedListField,但我无法弄清楚如何指定要对哪个键进行排序。

1 个答案:

答案 0 :(得分:0)

已解决-

assignment.bookings=sorted(assignment.bookings, key=lambda k: k.pickup_timestamp)

enter image description here答案几乎相同。在这方面,我不知道MongoEngine ListField的行为就像字典一样! 如果有更有效/更好的方式来做到这一点,将非常想知道!