Вот мой forms.py, тут моя форма наследует всё от модели, но один виджет у меня не стандартный (Select, а по стандарту у CharField идёт TextInput виджет). Есть функция, которая генерирует значения для него. Всё бы то ничего, только у моего виджета есть параметр choices, который принимает список значений для выбора. И вот этот список по задумке должен меняться в процессе выполнения кода. Но почему-то этого не происходит. Параметр choices как-будто бы принимает значения один раз, и то при запуске сервера, и не хочет их менять в процессе выполнения кода.
Вот все файлы:
# forms.py
from django.forms import ModelForm, TextInput, Select, DateInput
from department.models.employee import Employee
from department.funcional import func
class EmployeeForm(ModelForm):
class Meta:
model = Employee
fields = ['name', 'dep', 'salary', 'position', 'date']
widgets = {
"name": TextInput(attrs={
'class': 'form-control',
'placeholder': 'Enter a name for employee... '
}),
"dep": Select(choices=func.dep_select(), attrs={
'class': 'form-control',
}),
"salary": TextInput(attrs={
'class': 'form-control',
'placeholder': 'Enter salary... '
}),
"position": TextInput(attrs={
'class': 'form-control',
'placeholder': 'Enter position... '
}),
"date": DateInput(attrs={
'class': 'form-control',
'placeholder': 'Enter a date...'
}),
}
# views.py
def employee_add(request):
error = ''
form = EmployeeForm()
if request.method == "POST":
form = EmployeeForm(request.POST)
if form.is_valid():
form.save()
return redirect('employee_home')
else:
error = "Ошибка"
time = datetime.now().date()
data = {
'form': form,
'error': error,
'time': time,
}
return render(request, 'employee/employee_add.html', data)
#models.py
from django.db import models
class Employee(models.Model):
name = models.CharField('Employee:', max_length=30)
dep = models.CharField('Department:', max_length=30)
salary = models.CharField('Salary:', max_length=30)
position = models.CharField('Position:', max_length=30)
date = models.DateField('Date:', max_length=30)
А вот функция, генерирующая список. Эта функция из другой модели получает значения и вносит их dep_set. Но почему-то значения не хотят меняться в процессе выполнения кода. Но я только не могу понять, где именно они не меняются, в этой функции или же сам параметр choices принимает их единожды при запуске сервера...
from department.models.department import Department
def dep_select():
dep_set = []
department = Department.objects.all()
for i in department:
a = (i, i)
dep_set.append(a)
return dep_set