Автозаполнение поля в 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 = 'Заказы пиццы'