Переопределить механизм запросов 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
Каким способом лучше всего этого добиться? Какие-то конкретные причины, по которым вы бы рекомендовали отказаться от этого, если таковые имеются?