在dajngo CreateView中自动添加文件到表单



我有Major model和Course model。当我使用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)

我通过在createccourse中重写post方法来解决这个问题:

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')

最新更新