#django #many-to-many #django-queryset
Вопрос:
Я пытался написать приложение Django, которое управляет регистрацией учащихся в школе, для этого у меня есть две модели; Модель учащихся и модель класса, эти две модели связаны со многими ко многим моделями с помощью пользовательской модели (модель регистрации), как показано ниже:
class Student(models.Model):
fname = models.CharField(max_length=50)
sname = models.CharField(max_length=50)
gname = models.CharField(max_length=50)
lname = models.CharField(max_length= 50)
stdId = models.CharField(max_length= 10)
# other student attributes
class ClassRoom(models.Model):
eduYear = models.ForeignKey(EduYear, on_delete=models.CASCADE)
stage = models.ForeignKey(Stage, on_delete=models.CASCADE)
stageClass = models.ForeignKey(StageClass, on_delete=models.CASCADE)
oneClass = models.CharField(max_length=1)
max_std = models.IntegerField(null=True, blank=True)
student = models.ManyToManyField(Student, through='Enrollment')
class Meta:
unique_together = ("stage","stageClass","eduYear","oneClass")
def __str__(self):
pass
return '{} {} {} {} '.format( self.eduYear,self.stage,self.stageClass, self.oneClass)
# so, classroom will be as (2001 KG KG1 A)
class Enrollment(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
oneClass = models.ForeignKey(OneClass, on_delete=models.CASCADE)
EduYear = models.CharField(max_length=9) #Description of education year
# other extra fields
Я предоставил экран ввода данных для пользователя, чтобы сохранить информацию о студентах, где информация о классе вводится с помощью администрирования Django (потому что она почти не меняется). Пользователь может связать сохраненного ученика с любым классом, используя класс регистрации в любое время. это означает, что некоторые учащиеся могут быть сохранены без классной комнаты (это бизнес-требование), зачисление их в классную комнату может быть сделано позже. Чтобы зачислить студента, я создаю новую запись в класс зачисления, используя Pk для каждого из двух классов (Студент и класс), как показано ниже:
# code to get studentPk,classRoomPk from request.POST
p =Enrollment.objects.create(student=studentPk,
classRoom=classRoomPk,
EduYear=request.POST['eduYearName'])
Наконец, я предоставил экран поиска, который позволяет пользователю выполнять поиск по любому полю (в настоящее время все поля из класса учащихся).
Я могу разработать запрос, который покажет всех студентов, или запрос, который покажет всех зачисленных студентов
Мой вопрос в том, как написать запрос, который предоставит всем студентам; независимо от того, зачислены они или не зачислены в класс clss, а затем отправить результирующий набор запросов обратно в шаблон? если невозможно написать такой запрос, каково возможное решение? в шаблоне я хочу перечислить всех студентов в виде строк, где в каждой строке отображаются имя студента, идентификатор и зачисленный класс (если студент не зачислен, покажите, что он не зачислен)?