У меня есть рабочая функция, которая заполняет раскрывающийся список электронными письмами всех зарегистрированных преподавателей. Проблема в том, что когда новый репетитор регистрируется, он перенаправляется на домашний шаблон (где отображается фильтр формы), но раскрывающийся список с вариантами не обновляется, даже если я нажимаю refre sh. Он обновляется после того, как в VisualStudio я останавливаю сервер и снова запускаю runserver или нажимаю ctrl + s, и сервер перезагружается. Я понял, что функция get_tutores () вызывается только один раз, и я хочу, чтобы эта функция вызывалась из представлений каждый раз при перезагрузке страницы.
МОДЕЛЬ
class Tutor(models.Model):
user = models.OneToOneField(
User, on_delete=models.CASCADE, primary_key=True)
nombre = models.CharField(max_length=50, blank=False, null=True)
apellido = models.CharField(max_length=50, blank=False, null=True)
biografia = models.TextField()
curriculum = models.FileField(upload_to="curriculums/", blank=True, null=True)
foto = models.ImageField(blank=True, null=True)
carrera = models.ManyToManyField(Carrera, blank=True)
linea_invest = models.ManyToManyField(Linea_Invest, blank=True)
correo = models.EmailField(blank=True, null=True)
numero_celular = models.CharField(max_length=20, blank=True, null=True)
class Meta:
verbose_name_plural = "Tutores"
verbose_name = "Tutor"
def __str__(self):
return '%s %s' % (self.nombre, self.apellido)
ФИЛЬТР:
def get_tutores():
tutores = []
for tut in Tutor.objects.all():
tutores.append((tut.user.id,tut.user.email,))
return tutores
class TutorFilter(django_filters.FilterSet):
nombre = CharFilter(field_name="nombre", label="Nombre",lookup_expr='icontains')
apellido = CharFilter(field_name="apellido", label="Apellido",lookup_expr='icontains')
carrera = ModelMultipleChoiceFilter(field_name= "carrera", queryset= Carrera.objects.all())
user = ChoiceFilter( label = "correo", choices=get_tutores())
class Meta:
model = Tutor
fields = ("nombre", "apellido", "carrera","user")
ПРОСМОТРЫ
def home(request):
tutores = Tutor.objects.all()
filtro_tutor = TutorFilter(request.GET, queryset=tutores)
tutores = filtro_tutor.qs
context = {
'tutores': tutores , 'filtro_tutor': filtro_tutor
}
return render(request, 'home.html', context)
ШАБЛОН
<section class="section">
<div class="container">
<div class="columns ">
<div class="column ">
<div class="field is-grouped is-small ">
<div class="control ">
<form method="get">
{{ filtro_tutor.form }}
<div class="control">
<button class="button is-link" type="submit">
Buscar
</button>
</div>
</div>
</form>
</div>
<div>
{% for obj in filtro_tutor.qs %}
{{ obj.correo }} - ${{ obj.user }}<br />
{% endfor %}
</div>
</div>
</div>
</div>
</section>
Я напечатал в шаблоне набор запросов для l oop, и там он показывает мне новое электронное письмо от нового репетитора, которого я добавил (test9@g.com), но он не отображается в раскрывающемся списке.
Пытался сделать это в домашнем представлении:
filtro_tutor['user'].extra['choices'] = get_tutores()
Но получил "объект TutorFilter 'не может быть подписан"