Добрый день.
У меня в приложении все работает, но хотелось бы усовершенствовать один момент, связанный с вводом новой записи в таблицу.
Нужно сделать так, чтобы при вызове формы ввода новой записи один параметр - Инвентарный номер машины уже был записан как значение выпадающего списка в окне формы, чтобы пользователь не выбирал его вручную из списка.
Извиняюсь за некие вольности в написании кода .py и html, я только учусь и по другому ещё не умею.
Есть две модели:
модель mashina 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class Mashina(models.Model):
invnom = models.CharField(primary_key=True, max_length=15)
narabotka = models.FloatField(blank=True, null=True)
id_podr = models.SmallIntegerField(blank=True)
id_marka_mash = models.ForeignKey(MarkaMash, models.DO_NOTHING, db_column='id_marka_mash',
verbose_name = 'Марка машины')
nkg = models.FloatField(blank=True, null=True)
nom_pole = models.CharField(max_length=12, blank=True, verbose_name='№ поля')
ploshad = models.FloatField(blank=True, null=True)
grupa = models.SmallIntegerField(blank=True)
def __str__(self):
return self.invnom
def get_absolute_url(self):
return f'/voda/spravki/mashina/'
class Meta:
managed = False
db_table = 'mashina'
модель El_energi - расход электроэнергии машинами
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class El_energi(models.Model):
id_e = models.AutoField(primary_key=True)
invnom = models.ForeignKey(Mashina, on_delete=models.CASCADE, db_column='invnom',
verbose_name='№ машины')
data = models.DateField(auto_now=False, verbose_name='Дата')
rashod_el = models.FloatField(blank=True, null=True, verbose_name='Расход, кВт')
def get_absolute_url(self):
return f'/voda/uchet/uchet_voda_el/'
class Meta:
managed = False
db_table = 'el_energi'
Я могу видеть какой расход электроэнергии по датам был у каждой машины
views.py1.
2.
3.
4.
5.
6.
7.
8.
def rashod_el(request, mashina_invnom):
template = loader.get_template('voda/rashod_el.html')
context = {
'mashinas': Mashina.objects.all().order_by('invnom'),
'els': El_energi.objects.filter(invnom=mashina_invnom),
'mashina_invnom': mashina_invnom
}
return HttpResponse(template.render(context, request))
Вид страницы rashod_el.html - смотрите прилагаемый файл - Карточка расхода электро.jpeg
rashod_el.html1.
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.
{% extends "layout/basic.html" %}
{% block content %}
<head>
<meta charset="UTF-8">
<title>PnaBHa4 :: Учёт расхода электроэнергии </title>
</head>
<body>
<h1>
<button class="btn btn-secondary" type="button" onclick= location.href="{% url 'uchet_voda_el' %}";>
<i class="bi bi-arrow-left"></i>Назад</button>
Учёт расхода электроэнергии по машине № {{ mashina_invnom }}
<button class="btn btn-secondary" type="button" onclick= location.href="{% url 'el_createview' %}";>
<i class="bi bi-arrow-left"></i>Новый расход электроэнергии</button>
<button class="btn btn-secondary" type="button" onclick= location.href="{% url 'pdf_view_mashina' %}";>
<i class="bi bi-arrow-left"></i>Печать</button>
</h1>
<table>
<tr>
<th width="10%">Инвент. №</th>
<th>Дата</th>
<th>Расход, кВт.</th>
</tr>
{% for rashod_el in els %}
<tr>
<td> {{ mashina_invnom }} </td>
<td>{{ rashod_el.data|date:'d.m.Y' }}</td>
<td>{{ rashod_el.rashod_el }}</td>
</tr>
{% endfor %}
</table>
</body>
{% endblock %}
На этой странице я нажимаю кнопку "Новый расход электроэнергии"
и перехожу в форму ввода нового расхода - смотри прилагаемый рис. Форма Ввода Эл энерги.jpg
create_el_energi.html1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
{% extends "layout/basic.html" %}
{% block content %}
<head>
<meta charset="UTF-8">
<title>Учёт нового расхода электроэнергии : : Учёт электроэнергии </title>
</head>
<body>
<h1>Учёт нового расхода электроэнергии машиной</h1>
<form method="post">
{% csrf_token %}
<p1>Дата {{ form.data }}</p1><br><br>
<p2>Инв. № {{ form.invnom }} </p2><br><br>
<p3>Расход, кВт {{ form.rashod_el }}</p3><br><br>
<input type="submit" value="Добавить"> <a href="{% url 'uchet_voda_el' %}">Отмена</a>
</form>
</body>
{% endblock %}
Хотелось бы в качестве form.invnom на этой форме сразу получить значение инвентарного номера рассматриваемой машины.
Как это сделать?
forms.py1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class Create_elForm(ModelForm):
model = El_energi
data = forms.DateField(
label="Дата",
required=True,
widget=forms.DateInput(format="%Y-%m-%d", attrs={"type": "date"}),
input_formats=["%Y-%m-%d"]
)
rashod_el = forms.DecimalField(label='Расход, кВт', decimal_places=2)
class Meta:
model = El_energi
fields = ('id_e', 'data', 'invnom', 'rashod_el')
labels = {'invnom': 'Инв. №', 'rashod_el': 'Расход, кВт'}
views.py1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class el_createview(CreateView):
model = Mashina
model = El_energi
template_name = 'voda/create_el_energi.html'
form_class = Create_elForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['mashinas'] = Mashina.objects.all().order_by('invnom')
context['els'] = El_energi.objects.all()
return context
urls.py1.
2.
3.
4.
5.
6.
7.
8.
.....................
urlpatterns = [
........................................
.............................................
path ('rashod_el/<str:mashina_invnom>/', views.rashod_el, name='rashod_el'),
path ('new_el/', el_createview.as_view(), name='el_createview'),
]