Настройка Django форм - PullRequest
0 голосов
/ 21 марта 2020

Я создал модель с именем «Посещаемость».

class Attendance(models.Model) :
    course_name = models.ForeignKey(Course, on_delete=models.SET_NULL, null=True)
    student_name = models.ManyToManyField(Student)
    instructor_name = models.ForeignKey(Instructor, on_delete=models.SET_NULL, null=True)
    published_date = models.DateTimeField(blank=True, null=True)

Когда я передаю ее как форму, после выбора определенного курса мне приходится выбирать студентов из всего списка студентов, зачисленных на все курсы . Вместо этого я хочу настроить его так, чтобы отображалось только студентов, зачисленных на данный курс .

Я пытался использовать через поля для поля student_name, но в этом случае я Мне нужно передать посещаемость как модель внешнего ключа в модели Student, и мне нужно создать экземпляр посещаемости перед созданием экземпляра Student.

models.py:

class Course(models.Model) :
    name = models.CharField(max_length=20, default='')
    course_code = models.CharField(max_length=10, default='')

class Student(models.Model) :
    name = models.CharField(max_length=20, default='')
    rollno = models.CharField(max_length=10, unique=True, default='')
    course_name = models.ManyToManyField(Course)
    email_id = models.EmailField(max_length=40, default='')

class Instructor(models.Model) :
    name = models.OneToOneField(User, on_delete=models.CASCADE)
    course_name = models.ForeignKey(Course, models.SET_NULL, blank=True, null=True)

Кроме того, этот шаблон содержит ссылку на форму «Посещаемость». Я прошел курс, для которого посещаемость должна быть принята как параметр.

{% block content %}
      <h2>Select the course for which attendance has to be taken</h2>
      <h3><a href="{% url 'student_list' pk=clone_teacher.course_name.pk %}">{{ clone_teacher.course_name }}</a></h3>
{% endblock %}

Я застрял здесь довольно долго. Пожалуйста, помогите.

1 Ответ

1 голос
/ 21 марта 2020

Вы можете переопределить init вашего ModelForm для фильтрации поля ManyToMany.

class AttendanceForm(forms.ModelForm):

    class Meta:
        model = Attendance
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.instance.pk:
            self.fields['student_name'].queryset = Student.objects.filter(course_name=self.instance.course_name)
...