Автоматическое добавление файла в форму в dajngo CreateView
У меня есть модель Major и модель Course. Когда я добавляю курс в модель курса с помощью ModelForm и класса CreatView, я хочу добавить поле автоматически.
Я пытался использовать метод form_valid, но он выдает ошибку:
NOT NULL constraint failed: quizes_course.major_id
это основная модель:
class Major(models.Model):
name = models.CharField(max_length=50)
years = models.IntegerField(validators=[minMaxVal])
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("majors")
class Meta:
verbose_name_plural = "1. Majors"
и это модель курса:
class Course(models.Model):
major = models.ForeignKey(Major, on_delete=models.CASCADE)
year = models.IntegerField(validators=[minMaxVal])
name = models.CharField(max_length=100)
def __str__(self):
return f'{self.major.name}_{self.year}_{self.name}'
def get_absolute_url(self):
return reverse("courses", kwargs={"pk": self.major.pk})
class Meta:
verbose_name_plural = "2. Courses"
и вот такой вид:
class CreateCourse(CreateView):
model = Course
form_class = CourseCreateForm
template_name = 'quizes/create.html'
def form_valid(self, form):
form.save(commit=False)
major = get_object_or_404(Major, id=self.kwargs['pk'])
form.major = major.id
return super().form_valid(form)
Я решаю эту проблему, переопределяя метод post в CreateCourse:
def post(self, request, pk):
form = CourseCreateForm(request.POST)
if form.is_valid():
major = get_object_or_404(Major, id=pk)
form = form.cleaned_data
course = Course(major=major, name=form['name'], year=form['year'])
course.save()
return redirect(reverse('courses', kwargs={'pk':pk}))
return Http404('Error')