【问题标题】:Sort a ListField containing ReferenceField (Mongoengine)对包含 ReferenceField 的 ListField 进行排序(Mongoengine)
【发布时间】:2018-10-15 17:27:53
【问题描述】:

我有两个类声明如下:

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 上的列表中选择 Booking 对象,将 Bookings 组合在一个 Assignment 对象下。 创建分配对象时,我自动将接送时间设置为 Booking Pickup_timestamp 中的最小值,如下所示 -

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

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

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

【问题讨论】:

    标签: python mongoengine


    【解决方案1】:

    解决了 -

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

    这与this 答案几乎相同。我不知道 MongoEngine ListField 在这方面的行为与字典完全一样! 如果有更有效/更好的方法来做到这一点,将非常想知道!

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 2012-02-29
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多