Данные базы данных не обновляются на моем сайте apache2, если я не перезапущу службу apache2

У меня установлен Django и я использую Apache2 для размещения веб-сайта (используя WSGI). На моем сайте есть флажки, и когда я нажимаю на флажок, а затем нажимаю submit, он сохраняет изменения в базе данных SQLite3 и обновляет мой сайт. Если я выхожу из сайта, а затем снова вхожу, флажок больше не нажимается, но связанный элемент базы данных показывает TRUE на сайте администратора Django. Если я перезапущу Apache2 с помощью "sudo service apache2 restart" и обновлю сайт, то на нем появятся нужные флажки. Я совсем новичок в Django/Apache2, поэтому прошу прощения, если это глупая ошибка, но перезапуск apache2 каждый раз, когда я делаю изменения, кажется неправильным.

my views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import RelayList
from .forms import RelayControl
from django.contrib.auth.decorators import login_required


# Create your views here.
@login_required
def index(response):
        curList = RelayList.objects.get(id=1) #retrieves the database object and places it into a variable

        if response.method == "POST":
                form = RelayControl(response.POST)

                if form.is_valid():
                        curList.relay1 = form.cleaned_data["relay1"]
                        curList.relay2 = form.cleaned_data["relay2"]
                        curList.relay3 = form.cleaned_data["relay3"]
                        curList.save()
        else:
                form = RelayControl() # creates an instance of the for defined in class RelayControl in forms.py

        #return HttpResponse('<h1>Hello World, from index in views.py</h1>')
        #"pageHeader" is the variable it looks for in the html file and places whatever is after the ":" in its spot
        return render(response, "power_relay/home.html", {"pageHeader":"Power Relay Controls", "controlForm":form, "curList":curList})

мой основной сайт HTML

{% extends 'power_relay/base.html' %}

{% block title %}
        Power Relay Site- Controls
{% endblock %}


{% block content %}
        <form method="post" action="">
                {% csrf_token %}
                {{controlForm.as_p}}
                <button type="submit", name="saveChanges">Save Changes</button>
        </form>

        <hr><br><br>

        <a href="{% url 'settings'%}">Settings</a>
{% endblock %}

my models.py

from django.db import models

class RelayList(models.Model):
        name = models.CharField(max_length=20)
        relay1 = models.BooleanField(verbose_name="Relay 1")
        relay2 = models.BooleanField(verbose_name="Relay 2")
        relay3 = models.BooleanField(verbose_name="Relay 3")

        #relaylist = models.ForeignKey(RelayList, on_delete=models.CASCADE)
        #relayName = models.CharField(max_length=300)
        #onOff = models.BooleanField()

        def __str__(self):
                return self.name

my forms.py

from django import forms
from .models import RelayList


class RelayControl(forms.Form):
        curList = RelayList.objects.get(id=1) #retrieves the relay list from database

        relay1 = forms.BooleanField(label="Relay 1", required=False, initial=curList.relay1)
        relay2 = forms.BooleanField(label="Relay 2", required=False, initial=curList.relay2)
        relay3 = forms.BooleanField(label="Relay 3", required=False, initial=curList.relay3)

Виновник:

class RelayControl(forms.Form):
        curList = RelayList.objects.get(id=1) #retrieves the relay list from database

Поскольку вы объявляете это в теле класса формы, начальные значения для вашей формы устанавливаются при импорте forms.py ( вот краткое объяснение) - то есть при запуске wsgi приложения. Значения будут оставаться фиксированными до тех пор, пока приложение не импортирует forms.py.


Лучшим, более многоразовым подходом является использование ModelForm. В представлении вы передаете ему экземпляр модели (здесь: curList = RelayList.objects.get(id=1)), а django решает все остальное за вас.

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