Как реализовать данную функцию??Django

models.py:

class Student(models.Model):
    name = models.CharField(max_length=249)


class Course(models.Model):
    name = models.CharField(max_length=249)
    students = models.ManyToManyField(Student, through='Connect')

    

class Connect(models.Model):
    student = models.ForeignKey(Student, on_delete=models.SET_NULL, null=True)
    course = models.ForeignKey(Course, on_delete=models.SET_NULL, null=True)

функция view.py:

class CreateStudent(LoginRequiredMixin, CreateView):
    # …
    
    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.save()
        for student in form.cleaned_data['name']:
            connect = Connect()
            connect.student = self.object
            connect.course = Course.objects.get(pk=1)
            connect.save()
        return super(ModelFormMixin, self).form_valid(form)

при создании нового Student создаться связь Connect c первым элементом Course

connect.course = Course.objects.get(pk=1)

как написать функцию(отдельную view.py) которая поможет выбрать какие значения Courseпри создании нового Student установить по умолчанию ?


UPDATE

Должна быть функция которая определяет к какие именно курсы мы выбираем по умолчанию в браузере . допустим у нас в базе есть 3 курса (Математика, Физика , Химия) сейчас добавляеться Математика так как она первая . А нужно сделать view которая отображает все курсы(названия) и пользователь выбирает какие именно курсы будут добавляться по умолчанию к следущим студентам . Допустим пользователь выбрал Физика , Химия . Тогда при создании нового студента добавляются связи с Физика , Химия а не с Математика


Ответы (1 шт):

Автор решения: Za Ars

Примерно так.

Создаете форму, добавляете поле курсы. После сохранения объекта студента. ставим ему выбранные курсы. Если курс не выбран - будет курс с наименьшим id.

PS: Привязываться к id равному 1 плохая идея, так как объект может быть удален. Тогда будет ошибка

class FormAddStudent(forms.ModelForm):
    class Meta:
        model = Student
        fields = '__all__' # Или че хотите

    courses = forms.ModelMultipleChoiceField(queryset=Course.objects.all(), initial=Cource.objects.order_by('id').first())

    def save(self, *args, **kwargs):
        obj = super().save(*args, **kwargs)
        obj.course_set.set(self.cleaned_data['courses'])


→ Ссылка