Hey guys,
I am working on a project for evaluating teachers in school. But, at one stage I am stuck and nobody answered my question on StackOverflow; don’t know why!. Anyway, I want to build a model form from my Student_Answer class in a specific way. On the template, I want the model form to work this way;
< Teacher >
< Department>
< Subject>
< Semester>
- Question
- weak
-normal
-good
-excellent
- weak
- Question
- weak
-normal
-good
-excellent
- weak
I tried formset but the problem is I have multiple forms similar to each other. I have to select everything for every single question.
Is it possible to do such things with modelform ?
models.py
RATING_CHOICES = ((1, “Weak”), (2, “Average”), (3, “Good”), (4, “Excellent”))
SEMESTER = ((1, ‘1’), (2, ‘2’), (3, ‘3’), (4, ‘4’), (5, ‘5’), (6, ‘6’))
class Question(models.Model):
question = models.CharField(max_length=200)
def __str__(self):
return self.question
class Department(models.Model):
name = models.CharField(max_length=60)
def __str__(self):
return self.name
class Semester(models.Model):
num = models.IntegerField(choices=SEMESTER, default=1)
class Subject(models.Model):
name = models.CharField(max_length=100)
code = models.CharField(max_length=5, null=True)
semester = models.ForeignKey(Semester, on_delete=models.CASCADE)
department = models.ManyToManyField(Department)
def __str__(self):
return self.name
class Teacher(models.Model):
name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200, null=True)
department = models.ManyToManyField(Department)
subject = models.ManyToManyField(Subject)
def __str__(self):
return self.name
class Student_Answer(models.Model):
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
semester = models.ForeignKey(Semester, on_delete=models.CASCADE)
answer = models.SmallIntegerField(choices=RATING_CHOICES, default=1)
forms.py
class StudentForm(ModelForm):
class Meta:
model = Student_Answer
fields = '__all__'
widgets = {
'answer': RadioSelect(choices=RATING_CHOICES)
}