Django возвращает две переменные (одну связанную) в цикле for
Я создаю систему управления школьным расписанием. С помощью этой системы кто-то может выбрать модуль и посмотреть, какие учителя доступны в этот день и какие другие классы у них есть в этот конкретный день.
Например, если кто-то нажмет на "Математика", вы увидите следующее:
teacher_name1 - Date: 20/2/2022
Other classes on the same day: Physics, History
teacher_name2 - Date: 20/2/2022
Other classes on the same day: None
Я могу получить первую часть, когда кто-то нажимает на модуль, чтобы получить список учителей на определенную дату, но я не могу получить остальные модули, которые учитель проводит в тот же день
Мои модели следующие:
class Available_Module(models.Model):
module_name = models.CharField(max_length=100, unique=True, blank=True, null=True)
slug = models.SlugField(max_length=255, unique=False, null=True)
class Teacher(models.Model):
teacher_name = models.CharField(max_length=100, unique=True, blank=True, null=True)
slug = models.SlugField(max_length=255, unique=False, null=True)
class Schedule(models.Model):
calendar_date = models.DateField(default=date.today)
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, null=True, related_name="available_teacher")
module = models.ForeignKey(Available_Module, on_delete=models.CASCADE, null=True, related_name="module_item")
created_at = models.DateTimeField(default=timezone.now)
Ниже views.py:
def teachers_listing(request, module_slug, **date_filters):
module = Available_Module.objects.get(slug=module_slug)
get_module_id = Available_Module.objects.get(slug = clinic_slug).id
default_date = today
recent_dates = Schedule.objects.order_by('calendar_date').distinct('calendar_date').filter(calendar_date__range = (today, date_range))
date_filters = recent_dates
available_teachers = Schedule.objects.filter(module=get_module_id, calendar_date=default_date).order_by('module')
return render(request, 'schedule_core/available_teachers.html', {
'available_teachers': available_teachers,
'module': module,
'date_filters': date_filters,
'module_slug': module_slug
})
Как я уже говорил, когда кто-то нажимает на модуль, я хочу, чтобы он видел учителя, выбранный им модуль и другие модули, которые есть у учителя в тот же день. Однако я не могу вернуть остальные модули, которые есть у учителя.
{% for available_teacher in available_teachers %}
<li>{{ available_teacher.teacher }} - Date: {{ available_teacher.calendar_date | date:"M-d" }}</li>
<p>Other classes on the same day:</p> <!-- Here I cannot get the part of the rest of the modules that the teacher is having on the same day-->
{% endfor %}
Заранее большое спасибо за помощь
Я не уверен, что правильно понимаю, но простое предложение для получения всех модулей доступных учителей таково:
# Return all teachers teaching this module
available_teachers = Schedule.objects.filter(module=module).values('teacher').distinct()
# All other modules
modules = Schedule.objects.filter(teacher__in=available_teachers).exclude(module=module)
Часть exclude заключается в том, чтобы получить "остальные" модули, кроме того, на котором пользователь кликнул.