Данные в форме не отображаются в выпадающем списке Django
Итак, у меня есть система, которую я сейчас создаю. В настоящее время я реализовал форму, где администратор может выбрать из выпадающего списка учеников и добавить этих учеников в класс, но по какой-то причине ученики не отображаются в выпадающем списке, когда я добавляю ученика через форму, которую я создал для пользователя, но когда я использую Django admin, я могу заставить учеников отображаться в классе, который я выбрал, так что я действительно запутался, в чем проблема, и мне нужна помощь в реализации или изменении, чтобы заставить это работать. В целом, моя цель - заставить учеников отображаться в выпадающем списке для выбора и добавления в класс и знать, как правильно добавить моих учеников в класс, так как это вызывает у меня проблему
просмотров
# check to see if students already exist in class and display those who aint to be added
@login_required
def manage_class_student(request, classPK=None):
if classPK is None:
messages.warning(request, 'Class ID is Unknown')
else:
context = {}
context['classPK'] = classPK
_class = Room.objects.get(id=classPK)
# print(ClassStudent.objects.filter(classIns = _class))
students = Student.objects.exclude(id__in=ClassStudent.objects.filter(classIns=_class).values_list('student').distinct()).all()
context['students'] = students
html_form = render_to_string('school/manage_class_student.html', context=context, request=request)
return JsonResponse({'html_form': html_form})
# save the students to the respective class after being selected
@login_required
def save_class_student(request):
form = SaveClassStudent()
if request.method == 'POST':
form = SaveClassStudent(request.POST)
if form.is_valid():
form.save()
messages.success(request, "Student has been added successfully.")
redirect('class_detail')
else:
messages.error(request, 'Error Adding student in class')
forms.py
class ClassRoomForm(forms.ModelForm):
class Meta:
model = Room
fields = ('form_teacher', 'name', 'level', 'school_year')
def clean_assigned_faculty(self):
form_teacher = self.cleaned_data['assigned_faculty']
try:
teacher = Teacher.objects.get(id=form_teacher)
return teacher
except:
raise forms.ValidationError(f'Assigned Faculty value is invalid.')
class SaveClassStudent(forms.ModelForm):
class Meta:
model = ClassStudent
fields = ('classIns', 'student')
def clean_classIns(self):
cid = self.cleaned_data['classIns']
try:
classIns = Room.objects.get(id=cid)
return classIns
except:
raise forms.ValidationError("Class ID is Invalid.")
def clean_student(self):
student_id = self.cleaned_data['student']
_class = Room.objects.get(id=self.data.get('classIns'))
student = Student.objects.get(id=student_id)
try:
cs = ClassStudent.objects.get(classIns=_class, student=student)
if len(cs) > 0:
raise forms.ValidationError(
f"Student already exists in the Class List.")
except:
return student
manage_class_student.html
<div class="container-fluid">
<form action="" method="post">
{% csrf_token %}
<div class="modal-header">
<h6 class="modal-title" id="studentModalLabel"><i class="fas fa-plus"></i> Add Student To Class</h6>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<input type="hidden" name="classIns" value="{{ classPK }}">
<div class="form-group mb-3">
<label for="student" class="control-label">Student</label>
<select name="student" id="student" class="form-select rounded-0 select2" required>
<option disabled selected></option>
{% for student in students %}
<option value="{{ student.id }}">{{ student }}</option>
{% endfor %}
</select>
</div>
<div class="form-group mb-3 ">
<button type="submit" class="btn btn-primary">Save</button>
</div>
</div>
</form>
</div>
models.py
class Room(models.Model):
form_teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
school_year = models.CharField(max_length=250)
level = models.CharField(max_length=250)
name = models.CharField(max_length=250)
def __str__(self):
return "[" + self.level + "] " + self.level + '-' + self.name
class ClassStudent(models.Model):
classIns = models.ForeignKey(Room, on_delete=models.CASCADE)
student = models.ForeignKey(Student, on_delete=models.CASCADE)
def __str__(self):
return self.student.student_code
def get_present(self):
student = self.student
_class = self.classIns
try:
present = Attendance.objects.filter(
classIns=_class, student=student, type=1).count()
return present
except:
return 0
def get_tardy(self):
student = self.student
_class = self.classIns
try:
present = Attendance.objects.filter(
classIns=_class, student=student, type=2).count()
return present
except:
return 0
def get_absent(self):
student = self.student
_class = self.classIns
try:
present = Attendance.objects.filter(classIns= _class, student=student, type = 3).count()
return present
except:
return 0