Как сохранять данные в input
Я разрабатываю свой сайт и столкнулся такой проблемой.
Я создал таблицу и в ней я хочу хранить данные в input.
Сейчас это выглядит так:
personal.html
{% extends 'base.html' %}
{% block title %} Персонал. Информационный центр {% endblock %}
{% block content %}
{% now "Y/M/D" as current_now %}
<form method="POST">
{% csrf_token %}
<table class="table">
<thead>
<tr>
<caption style="text-align:left">Текущий дата {{ current_now }} </caption>
<th scope="col"> </th>
{% for month in months %}
<th scope="col">{{ month }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
<tr>
<th scope="row">СЧ филиала на конец мес (факт), чел</th>
{% for month, value in months_fact.items %}
{% if forloop.counter == current_month %}
<td><input type="number" name="{{month}}" value="{{value}}" style="width:70px"></td>
{% else %}
<td><input type="number" name="{{month}}" value="{{value}}" style="width:70px; background-color:#A9A9A9" readonly></td>
{% endif %}
{% endfor %}
</tr>
<th scope="row">СЧ филиала на конец мес (по штату), чел</th>
{% for month in months %}
{% if forloop.counter == current_month %}
<td><input type="number" name="" value="" style="width:70px"></td>
{% else %}
<td><input type="number" name="" value="" style="width:70px; background-color:#A9A9A9" readonly></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th scope="row">Вакансий, шт.</th>
{% for month in months %}
{%if forloop.counter == current_month%}
<td><input type="number" style="width:70px"></td>
{% else %}
<td><input type="number" style="width:70px; background-color:#A9A9A9" readonly></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th scope="row">Принято, чел</th>
{% for month in months %}
{%if forloop.counter == current_month%}
<td><input type="number" style="width:70px"></td>
{% else %}
<td><input type="number" style="width:70px; background-color:#A9A9A9" readonly></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th scope="row">Уволено, чел</th>
{% for month in months %}
{%if forloop.counter == current_month%}
<td><input type="number" style="width:70px" ></td>
{% else %}
<td><input type="number" style="width:70px; background-color:#A9A9A9" readonly></td>
{% endif %}
{% endfor %}
</tr>
<tr>
<th scope="row">Мат. Помощь, чел</th>
{% for month in months %}
{%if forloop.counter == current_month%}
<td><input type="number" style="width:70px"></td>
{% else %}
<td><input type="number" style="width:70px; background-color:#A9A9A9" readonly></td>
{% endif %}
{% endfor %}
</tr>
</tbody>
</table>
<div style="text-align:right;">
<button type="submit" class="save btn btn-secondary">Сохранить показания</button>
</div>
</form>
{% endblock %}
На данной момент models.py выглядит вот так
class shfact(models.Model):
class Meta:
verbose_name = 'СЧ филиала на конец мес (факт)'
verbose_name_plural = 'СЧ филиала на конец мес (факт)'
month = models.CharField(max_length=20, verbose_name='Месяц')
sch_fact = models.IntegerField(verbose_name='Значение')
def __str__(self):
return f'{self.month} - {self.sch_fact}'
class shshat(models.Model):
class Meta:
verbose_name = 'СЧ филиала на конец мес (по штату), чел'
verbose_name_plural = 'СЧ филиала на конец мес (по штату), чел'
month = models.CharField(max_length=20, verbose_name='Месяц')
sch_shat = models.IntegerField(verbose_name='Значение')
def __str__(self):
return f'{self.month} - {self.sch_shat}'
И черновой вариант views.py:
from django.shortcuts import redirect, render
from datetime import datetime
from zatrati_personal.models import shfact
def zatrati_personal(request):
months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь']
now = datetime.now()
current_month = now.month
if request.method == 'POST':
for month, value in request.POST.items():
if month != 'csrfmiddlewaretoken':
shfact.objects.update_or_create(month=month, defaults={'sch_fact': value})
return redirect('zatrati_personal:index')
months_fact = {obj.month: obj.sch_fact for obj in shfact.objects.all()}
context = {
'months': months,
'current_month': current_month,
'months_fact': months_fact,
}
return render(request, "zatrati_personal/personal.html", context)
Так код срабатывает на одну горизонтальную колонку Как мне решить проблему с остальными горизонтальными колонками. Скрин прилагаю для наглядности
Сейчас выглядит вот так и работает
views.py
from django.shortcuts import redirect, render
from datetime import datetime
from zatrati_personal.models import shfact, shshat, vacancy,accepted, dismissed, mathelp
def zatrati_personal(request):
months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь']
now = datetime.now()
current_month = now.month
if request.method == 'POST':
#print(request.POST)
for month in months:
value_facts = request.POST.getlist(month)
shfact.objects.update_or_create(month=month, defaults={'sch_fact': value_facts[0]})
shshat.objects.update_or_create(month=month, defaults={'sch_shat': value_facts[1]})
vacancy.objects.update_or_create(month=month, defaults={'vacancy': value_facts[2]})
accepted.objects.update_or_create(month=month, defaults={'accepted': value_facts[3]})
dismissed.objects.update_or_create(month=month, defaults={'dismissed': value_facts[4]})
mathelp.objects.update_or_create(month=month, defaults={'mathelp': value_facts[5]})
months_fact = {obj.month: obj.sch_fact for obj in shfact.objects.all().order_by('id')}
months_shat = {obj.month: obj.sch_shat for obj in shshat.objects.all().order_by('id')}
months_vacancy = {obj.month: obj.vacancy for obj in vacancy.objects.all().order_by('id')}
months_accepted = {obj.month: obj.accepted for obj in accepted.objects.all().order_by('id')}
months_dismissed = {obj.month: obj.dismissed for obj in dismissed.objects.all().order_by('id')}
months_mathelp = {obj.month: obj.mathelp for obj in mathelp.objects.all().order_by('id')}
context = {
'months': months,
'current_month': current_month,
'months_fact': months_fact,
'months_shat': months_shat,
'months_vacancy': months_vacancy,
'months_accepted': months_accepted,
'months_dismissed': months_dismissed,
'months_mathelp': months_mathelp,
}
return render(request, "zatrati_personal/personal.html", context)