Как реализовать данную функцию??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 шт):
Примерно так.
Создаете форму, добавляете поле курсы. После сохранения объекта студента. ставим ему выбранные курсы. Если курс не выбран - будет курс с наименьшим 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'])