Django: использование методов модели без создания экземпляра
У меня есть модель Product с бизнес-методами. Моя модель содержит отношения с моделями Item и Dealer.
Допустим, мой Product сериализован как / может быть создан из:
{
"name": "productA",
"items": [2,3,13],
"dealer": [1,2]
}
Я могу, например, выполнить Product.simulation():
class Product(Models):
....
def simulate(self):
```dummy function to illustrate```
return sum(i.price for i in self.items.all()) / len(i.dealer.all())
Я хотел бы иметь возможность вычислять Product.simulation со значениями в словаре без создания Product экземпляра. У меня есть несколько signals и пакетные операции на Product модели, которые я не хочу выполнять только для объектов моделирования.
Я мог бы создать атрибут for_simulation на Product и указать в своих сигналах / пакетных операциях не запускать эти экземпляры, но это, кажется, приводит к дублированию кода и забыванию о некоторых сигналах / пакетах.
С другой стороны, я мог бы переписать все мои методы в Product, Item, Dealer для работы с dict в качестве входных данных, но их очень много.
Есть ли лучший способ достичь моей цели? В идеале я хотел бы иметь возможность сделать что-то вроде:
p = Product({
"name": "productA",
"items": [2,3,13],
"dealer": [1,2]
})
p.simulation()
Я не могу: мои экземпляры нужно сохранить, чтобы построить отношения.