С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.11.2021
Сообщений: 1

Изменение поля модели в БД при нажатии кнопки

15.11.2021, 12:30. Показов 1343. Ответов 0

Студворк — интернет-сервис помощи студентам
Создаю веб-приложение для пиццерии. Нужно добавить действие: при нажатии на кнопку "Заказ доставлен", статус заказа должен поменяться на "Заказ выполнен". Как это сделать?

models.py:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
from django.db import models
from django.db.models.fields import DecimalField, NullBooleanField
import decimal
from django.utils import timezone
from django.db.models.signals import pre_save
from django.dispatch import receiver
 
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)
    date = models.DateField(verbose_name='Дата обновления', default=timezone.now())
    def __str__(self):
        return self.title
 
    class Meta():
        verbose_name = 'Продукты'
        verbose_name_plural = 'Продукция'   
 
class Technology_card(models.Model):
 
    title = models.TextField(verbose_name='Название ТК',default='Технологическая карта для пиццы')
    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 __str__(self):
        return self.title
 
    class Meta():
        verbose_name = 'Технологическая карта'
        verbose_name_plural = 'Технологические карты' 
 
class Pizza(models.Model):
    
    title = models.CharField(verbose_name='Название пиццы', max_length=100)
    technology_card = models.ForeignKey(Technology_card, on_delete=models.CASCADE)
    time_production = models.PositiveIntegerField(verbose_name='Время изготовления', default=10)
    time_baking_time = models.PositiveIntegerField(verbose_name='Время выпекания', default=10)  
    price = models.DecimalField(verbose_name='Цена', max_digits = 10, decimal_places=2, default = 0)
 
    def save(self, *args, **kwargs):
        price = 100
        pr = []
        for i in range(1,23):
            pr.append(Product.objects.get(id = i))
        pi1 = pr[0].price * self.technology_card.pizza_box
        pi2 = pr[1].price * self.technology_card.napkins
        pi3 = pr[2].price * self.technology_card.dough
        pi4 = pr[3].price * self.technology_card.flour
        pi5 = pr[4].price * self.technology_card.tomato_sauce
        pi6 = pr[5].price * self.technology_card.cream_sauce
        pi7 = pr[6].price * self.technology_card.olive_oil
        pi8 = pr[7].price * self.technology_card.mozzarella_cheese
        pi9 = pr[8].price * self.technology_card.parmesan_cheese
        pi10 = pr[9].price * self.technology_card.dor_blue_cheese
        pi11 = pr[10].price * self.technology_card.bacon
        pi12 = pr[11].price * self.technology_card.ham
        pi13 = pr[12].price * self.technology_card.pineapple
        pi14 = pr[13].price * self.technology_card.cervelat
        pi15 = pr[14].price * self.technology_card.pepperoni
        pi16 = pr[15].price * self.technology_card.pickled_chicken
        pi17 = pr[16].price * self.technology_card.tomatoes
        pi18 = pr[17].price * self.technology_card.champignons
        pi19 = pr[18].price * self.technology_card.italian_herbs
        pi20 = pr[19].price * self.technology_card.green_onion
        pi21 = pr[20].price * self.technology_card.garlic_butter_box
        pi22 = pr[21].price * self.technology_card.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
        coff = decimal.Decimal(1.50)
        self.price = (price * coff).quantize(decimal.Decimal("1.00"))
        super(Pizza, self).save(*args, **kwargs)
 
    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='Кол-во выполненых заказов', default=0)
 
    def __str__(self):
        return (self.surname + " " + self.name + " " + self.patronymic)
    
    class Meta():
        verbose_name = 'Курьер'
        verbose_name_plural = 'Курьеры'    
 
class OrderPizza(models.Model):
 
    STATUS_ACCEPT = 'Принят'
    STATUS_COOK = 'Готовится'
    STATUS_PREPARED = 'Приготовлен'
    STATUS_DELIVERED = 'Доставляется'
    STATUS_EXECUTE = 'Исполнен'
 
    STATUS_CHOISES = (
        (STATUS_ACCEPT, 'Принят'),
        (STATUS_COOK, 'Готовится'),
        (STATUS_PREPARED, 'Приготовлен'),
        (STATUS_DELIVERED, 'Доставляется'),
        (STATUS_EXECUTE, 'Исполнен')
    )
    id = models.AutoField(primary_key=True)
    date = models.DateField(verbose_name='Дата заказа', null=False, default = timezone.now())
    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.ForeignKey(Courier, on_delete=models.CASCADE)
    status = models.CharField(
        verbose_name='Статус', 
        max_length=12, 
        choices=STATUS_CHOISES, 
        default=STATUS_ACCEPT
        )
    
    def __str__(self):
        return ('Заказ от {0}  {1}').format(self.surname, self.date)
 
    class Meta():
        verbose_name = 'Заказ пиццы'
        verbose_name_plural = 'Заказы пиццы'  
 
class OrderPizzaWithPrice(models.Model):    
 
    order = models.ForeignKey(OrderPizza, on_delete=models.CASCADE)
    price = models.DecimalField(verbose_name='Стоимость заказа', default=0, max_digits = 10, decimal_places=2)
 
    def save(self, *args, **kwargs):
        self.price = sum([price.price for price in self.order.order.all()])       
        super(OrderPizzaWithPrice, self).save(*args, **kwargs)
 
    def __str__(self):
        return ('Заказ от {0}  {1}').format(self.order.surname, self.order.date)
 
    class Meta():
        verbose_name = 'Заказ пиццы со стоимостью'
        verbose_name_plural = 'Заказы пиццы со стоимостью'
views.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from django.shortcuts import render
 
from django.http import HttpResponse
from django.views.generic.base import RedirectView
 
from .models import OrderPizzaWithPrice, Product, Pizza ,Courier, OrderPizza, Technology_card
 
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
 
def index(request):
    return HttpResponse('Hello!')
 
class OrderView(ListView):
    model = OrderPizzaWithPrice
    template_name = 'mainapp/listOrder.html'
    context_object_name = "orders_list"
    ordering = ['-id']
 
    def get_context_data(self,*,object_list=None, **kwargs):
        context = super().get_context_data(**kwargs)
        context['orders_list'] = OrderPizzaWithPrice.objects.all()
        return context
 
class ProductView(ListView):
    model = Product
    template_name = 'mainapp/listProducts.html'
    context_object_name = "product_list"
    ordering = ['-id']
 
    def get_context_data(self,*,object_list=None, **kwargs):
        context = super().get_context_data(**kwargs)
        context['product_list'] = Product.objects.all()
        return context
 
    def upload(request):
        if request.method == 'POST':
            
            return RedirectView('home')
listOrder.html:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{% extends 'base.html' %}
{% block title %}Orders{% endblock %}
{% block content %}      
            
                    {% for i in orders_list %}
                    <table style="border:1px solid #000000">
                        <tr><td>Имя</td><td>{{i.order.name}}</td></tr>
                        <tr><td>Фамилия</td><td>{{i.order.surname}}</td></tr>
                        <tr><td>Телефон</td><td>{{i.order.phone_number}}</td></tr>
                        <tr><td>Адрес</td><td>{{i.order.adress}}</td></tr>
                        <tr><td>Заказ</td><td>
                            {% for n in i.order.order.all %}
                                {{n.title}}
                            {% endfor %}                            
                        </td></tr>
                        <tr><td>Стоимость</td><td>{{i.price}}</td></tr>
                        <tr><td>Курьер</td><td>{{i.order.courier}}</td></tr>
                        <tr><td>Статус</td><td>{{i.order.status}}</td></tr>
                        <tr><td>
                            <form method="post">
                                <button type="submit">Заказ доставлен</button>
                            </form>
                        </td><tr>
                    </table>
                    {% endfor %}
               
        
        
{% endblock %}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2021, 12:30
Ответы с готовыми решениями:

Как изменить значение поля модели при нажатии кнопки, django?
Модель имеет поле BooleanField(default = False). Как изменить это поле в True при нажатии кнопки?

Изменение поля выгруженных данных в модели при выводе на страницу
Добрый день! выгружаю данные из модели для отображения на странице, в числовом столбце записаны числа формата completion = 0.76 как...

Изменение свойств кнопки при нажатии
Всем привет. Есть такой код: &lt;Button x:Name=&quot;ViewingClient&quot; Height=&quot;35&quot; ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2021, 12:30
Помогаю со студенческими работами здесь

Изменение цвета кнопки при ее нажатии
На форме есть несколько кнопок. При нажатии на кнопку запускается метод fun, в который передается два int. private void...

Изменение размера кнопки при нажатии
Я через псевдо класс :active изменяю в кнопке font-size в меньшую сторону и при её уменьшении соседняя кнопка сдвигается, можно ли как-то...

Изменение цвета кнопки при ее нажатии
Как сделать,чтобы при нажатии на кнопку она изменила свой цвет в visual studio 2010?

Изменение текста при нажатии кнопки
Добрый день. Сразу извиняюсь что не в ту тему, но здесь в базах данных, сидят более Опытные программисты. Надеюсь Вы, сможете мне...

Изменение фона при нажатии кнопки
Здравствуйте, нужно сделать так, чтоб при нажатии на Button, её фон менялся, нужно как-то так делать button1.BackColor, наверно. Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru