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()

Я не могу: мои экземпляры нужно сохранить, чтобы построить отношения.

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