Автозаполнение поля в django

Нужно сделать так, чтобы цена для пиццы считалась автоматически. Подскажите, как это сделать. Знаю, что хардкод, но нужно сделать быстро, поэтому другие варианты пока не рассматривал. Выдает ошибку: TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'DecimalField'

from django.db import models
from django.db.models.fields import DecimalField
from decimal import *

class Product(models.Model):

    title = models.CharField(verbose_name='Название продукции', max_length=100)
    count = models.DecimalField(verbose_name='Кол-во на складе', max_digits = 10, decimal_places=4)
    price = models.DecimalField(verbose_name='Цена', max_digits = 10, decimal_places=4)
    def __str__(self):
        return self.title

    class Meta():
        verbose_name = 'Продукты'
        verbose_name_plural = 'Продукция'   

class Pizza(models.Model):
    
    title = models.CharField(verbose_name='Название пиццы', max_length=100)
    pizza_box = models.DecimalField(verbose_name='Коробки пиццы',max_digits = 10, decimal_places=4, default=1)
    napkins = models.DecimalField(verbose_name='Салфетки',max_digits = 10, decimal_places=4, default=6)
    dough = models.DecimalField(verbose_name='Тесто',max_digits = 10, decimal_places=4, default=0)
    flour = models.DecimalField(verbose_name='Мука',max_digits = 10, decimal_places=4, default=0)
    tomato_sauce = models.DecimalField(verbose_name='Соус томатный',max_digits = 10, decimal_places=4, default=0)
    cream_sauce = models.DecimalField(verbose_name='Соус сливочный', max_digits = 10, decimal_places=4, default=0)
    olive_oil = models.DecimalField(verbose_name='Оливковое масло', max_digits = 10, decimal_places=4, default=0)
    mozzarella_cheese = models.DecimalField(verbose_name='Сыр Моцарелла', max_digits = 10, decimal_places=4, default=0)
    parmesan_cheese = models.DecimalField(verbose_name='Сыр Пармезан', max_digits = 10, decimal_places=4, default=0)  
    dor_blue_cheese = models.DecimalField(verbose_name='Сыр Дор Блю', max_digits = 10, decimal_places=4, default=0)
    bacon = models.DecimalField(verbose_name='Бекон', max_digits = 10, decimal_places=4, default=0)
    ham = models.DecimalField(verbose_name='Ветчина', max_digits = 10, decimal_places=4, default=0)
    pineapple = models.DecimalField(verbose_name='Ананас', max_digits = 10, decimal_places=4, default=0)
    cervelat = models.DecimalField(verbose_name='Сервелат', max_digits = 10, decimal_places=4, default=0)
    pepperoni = models.DecimalField(verbose_name='Пепперони', max_digits = 10, decimal_places=4, default=0)
    pickled_chicken = models.DecimalField(verbose_name='Курица маринованная', max_digits = 10, decimal_places=4, default=0)
    tomatoes = models.DecimalField(verbose_name='Томаты', max_digits = 10, decimal_places=4, default=0)
    champignons = models.DecimalField(verbose_name='Шампиньоны', max_digits = 10, decimal_places=4, default=0)
    italian_herbs = models.DecimalField(verbose_name='Итальянские травы', max_digits = 10, decimal_places=4, default=0)
    green_onion = models.DecimalField(verbose_name='Лук зеленый', max_digits = 10, decimal_places=4, default=0)
    garlic_butter_box = models.DecimalField(verbose_name='Масло чесночное бокс', max_digits = 10, decimal_places=4, default=1)
    pepper_oil_box = models.DecimalField(verbose_name='Масло перцовое бокс', max_digits = 10, decimal_places=4, default=1)

    def get_price(pizza_box, napkins, dough, flour, tomato_sauce, cream_sauce, olive_oil, mozzarella_cheese, parmesan_cheese, dor_blue_cheese, bacon, ham, pineapple, 
    cervelat, pepperoni, pickled_chicken, tomatoes, champignons, italian_herbs, green_onion, garlic_butter_box,pepper_oil_box):
        pr = []
        for i in range(1,23):
            pr.append(Product.objects.get(id = i).price)
        pi1 = pr[1] * pizza_box
        pi2 = pr[2].price * napkins
        pi3 = pr[3].price * dough
        pi4 = pr[4].price * flour
        pi5 = pr[5].price * tomato_sauce
        pi6 = pr[6].price * cream_sauce
        pi7 = pr[7].price * olive_oil
        pi8 = pr[8].price * mozzarella_cheese
        pi9 = pr[9].price * parmesan_cheese
        pi10 = pr[10].price * dor_blue_cheese
        pi11 = pr[11].price * bacon
        pi12 = pr[12].price * ham
        pi13 = pr[13].price * pineapple
        pi14 = pr[14].price * cervelat
        pi15 = pr[15].price * pepperoni
        pi16 = pr[16].price * pickled_chicken
        pi17 = pr[17].price * tomatoes
        pi18 = pr[18].price * champignons
        pi19 = pr[19].price * italian_herbs
        pi20 = pr[20].price * green_onion
        pi21 = pr[21].price * garlic_butter_box
        pi22 = pr[22].price * pepper_oil_box
        price = pi1 + pi2 + pi3 + pi4 + pi5 + pi6 + pi7 + pi8 + pi9 + pi10 + pi11 + pi12 + pi13 + pi14 + pi15 + pi16 + pi17 + pi18 + pi19 + pi20 + pi21 + pi22

        return price*1,5       
        
    price = models.DecimalField(verbose_name='Цена', max_digits = 10, decimal_places=4, default=get_price(pizza_box, napkins, dough, flour, tomato_sauce, cream_sauce, olive_oil, mozzarella_cheese, parmesan_cheese, dor_blue_cheese, bacon, ham, pineapple, 
    cervelat, pepperoni, pickled_chicken, tomatoes, champignons, italian_herbs, green_onion, garlic_butter_box,pepper_oil_box))

    def __str__(self):
        return self.title

    class Meta():
        verbose_name = 'Пицца'
        verbose_name_plural = 'Пицца'

class Courier(models.Model):
    name = models.CharField(verbose_name='Имя курьера', max_length=50)
    surname = models.CharField(verbose_name='Фамилия курьера', max_length=50)
    patronymic = models.CharField(verbose_name='Отчество курьера', max_length=50)
    count_order = models.PositiveIntegerField(verbose_name='Кол-во выполнены заказов')

    def __str__(self):
        return (self.surname + " " + self.name + " " + self.patronymic)
    
    class Meta():
        verbose_name = 'Курьер'
        verbose_name_plural = 'Курьеры'    

class OrderPizza(models.Model):
    date = models.DateField(verbose_name='Дата заказа', null=False)
    name = models.CharField(verbose_name='Имя заказчика', max_length=50)
    surname = models.CharField(verbose_name='Фамилия заказчика', max_length=50)
    phone_number = models.CharField(verbose_name='Номер телефона', max_length=10)
    adress = models.CharField(verbose_name='Адрес доставки', max_length=40)
    order = models.ManyToManyField(Pizza)
    courier = models.ManyToManyField(Courier)
    status = models.CharField(verbose_name='Статус', max_length=10)
    # status - accept(ac) - принят, cook(co) - готовится, prepared(pr)- готов, delivered(de)- доставяется, 
    # execute(ex) - исполнен

    class Meta():
        verbose_name = 'Заказ пиццы'
        verbose_name_plural = 'Заказы пиццы' 
Вернуться на верх