Пропадает клик при переходе на страницу

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
На моей странице есть кнопка, которая считает количество нажатий на нее. Когда я обновляю страницу - это количество сохраняется, а вот если я перейду на другую страницу - значение обнулится.

views.py:
Python:
def black(request):
    value = Choose()

    if request.method == 'POST':
        select_action = request.POST['choose']

        if select_action == 'black':
            value.count_black += 1

        value.save()
    # return redirect("home")

    context = {"value": value}

    return render(request, 'registration/black.html', context)

model.py:
Python:
from django.db import models


class Choose(models.Model):
    count_black = models.PositiveIntegerField(default=0)
    count_white = models.PositiveIntegerField(default=0)
    count_purple = models.PositiveIntegerField(default=0)

форма(black.html):
HTML:
<form method="post">
    {% csrf_token %}

        <button  class="button_b" name="choose" value="black">
            <h1 style="color: white">
                <strong>Choose</strong>
            </h1>
        </button>

        <h1 style="color: red">{{ value.count_black }}</h1> {# строка, выводящая значение #}
    </form>

И еще, при нажатии на кнопку значение меняется + на единицу один раз, а потом остается прежним. Почему?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
На моей странице есть кнопка, которая считает количество нажатий на нее. Когда я обновляю страницу - это количество сохраняется, а вот если я перейду на другую страницу - значение обнулится.
У вас в коде при каждом переходе на страницу создается новый экземпляр класса Choose, поэтому значение при переходе с другой страницы обнуляется.
И еще, при нажатии на кнопку значение меняется + на единицу один раз, а потом остается прежним. Почему?
Это происходит потому что при переходе на страницу создается новый экземпляр класса Choose и в шаблон передается значение по умолчанию (count_black = 0), а после нажатия на кнопку новый экземпляр создается и сохраняется в базу со значением count_black = 1. При повторных нажатиях на кнопку происходит тоже самое (создается и сохраняется новый экземпляр класса Choose со значением count_black = 1) поэтому создается впечатление что значение меняется только 1 раз.
Чтобы значение сохранялось можно использовать только один экземпляр класса Choose для кнопки:
Python:
def black(request):
    # value = Choose()
    # получаем или создаем экземпляр класса с pk=1
    value, created = Choose.objects.get_or_create(pk=1)

    if request.method == 'POST':
        select_action = request.POST['choose']

        if select_action == 'black':
            value.count_black += 1

        value.save()
    # return redirect("home")

    context = {"value": value}

    return render(request, 'registration/black.html', context)
 
  • Мне нравится
Реакции: Domohod45 и Student

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
У вас в коде при каждом переходе на страницу создается новый экземпляр класса Choose
Можете пожалуйста сказать, почему так происходит?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Можете пожалуйста сказать, почему так происходит?
Потому что в переменную value каждый раз присваивается значение нового экземпляра класса Choose:
Python:
value = Choose()
 

Форум IT Специалистов