Добавить свойства к модели из другого приложения в django? (расширить модель из другого приложения)
У меня есть приложение (с именем essence), которое я использую в нескольких проектах (это общее приложение с одной моделью User и моделью Location, которые используются в нескольких моих проектах)
Модель Location выглядит примерно так:
class Location(models.Model):
name = models.CharField(max_length=50)
alternate_location_id = models.IntegerField()
class Meta(object):
ordering = ["name"]
def __str__(self):
return self.name
В настоящее время у меня есть функция, которая берет набор локаций, итерирует его и создает словарь для каждой локации с необходимыми данными. Но это вызывает много дополнительных запросов, которых я хотел бы избежать. Поэтому я пытаюсь понять, можно ли динамически добавлять свойства в модель Location из приложения positions.
Функция возвращает словарь, который выглядит следующим образом:
{
"location_id": location.id,
"location_name": location.name,
"alternate_location_id": location.alternate_location_id,
"location_current_position_count": position_count,
"location_current_position_average": position_average,
"location_change": location_position_change,
}
Три переменные, перечисленные в этом словаре (position_count, position_average и location_position_change) вычисляются с помощью различных запросов других связанных моделей в функции (которые не используют aggregate/annotate, но могли бы/должны были бы - отсюда мой рефакторинг сейчас)
Я хотел бы избавиться от этой функции и просто сделать эти другие переменные атрибутами/свойствами самой модели Location, чтобы мне не приходилось так часто обращаться к БД.
Мой вопрос - где это должно жить?
Вариант 1 выглядит следующим образом: расширить модель Location в приложении positions и сделать это там?
Но тогда мне придется переписать всю логику приложения, чтобы использовать модель positions.Location вместо модели essence.Location - а я хотел бы избежать миграций и необходимости затрагивать так много различных участков кода, если это возможно.
Есть ли другие варианты? Возможно, уровень "сервиса"? ( о чем говорилось здесь)
Я хочу избежать добавления чего-либо к модели в приложении essence, потому что она используется в других проектах и возникнут проблемы, если она будет ссылаться на другие приложения, которые не существуют в других проектах.