Переопределить механизм запросов mongoengine

Допустим, у меня есть 2 коллекции mongo, которые обрабатываются с помощью mongoengine на сервере.

class UserA(Document):

  first_name = fields.StringField()
  last_name = fields.StringField()
  country = fields.StringField()

class UserB(Document):  # completely independent of UserA at storage layer
  full_name = fields.StringField()
  country = fields.StringField()

UserA и UserB - это 2 отдельные коллекции (хранящиеся отдельно в базе данных), имеющие отдельные записи и не имеющие ничего общего друг с другом на уровне хранения.

UserA может быть преобразовано в UserB с помощью этой формулы на вычислительном (серверном) уровне.

def convert_to_userb(user_a):
  user_b = UserB()
  user_b.full_name = user_a.first_name + " " + user_b.last_name
  user_b.country = user_a.country
  return user_b

Теперь, по какой-то причине, я хочу переопределить вызов objects() в mongoengine из UserB, чтобы также получать данные из UserA. Что-то вроде

@queryset_manager
def objects(doc_cls, queryset):
  actual_results = <Some form of UserA.objects(query_set)> # result that one would get normally without any override
  additional_results = convert_to_userb(<Some form of UserA.objects(query_set)>)
  return actual_results + additional_results

Каким способом лучше всего этого добиться? Какие-то конкретные причины, по которым вы бы рекомендовали отказаться от этого, если таковые имеются?

Вернуться на верх