CreateView
유형의보기를 생성하려고합니다. 이보기에는 내가 만든 일부 필드가 제외 된 form_class = CourseForm
이 표시됩니다. instructor
필드는 foriegnKey이며 사용자가 양식에서 제어 할 수 없도록하고 싶습니다. 로그인 한 사용자에 따라 달라지는 필드입니다.Django : CreateView에서 ForiegnKey의 초기 값을 설정하십시오.
# forms.py
class CourseForm(forms.ModelForm):
class Meta:
model = Course
exclude = ['instructor', 'members', 'slug']
# ...
내보기는 다음과 같습니다. 나는
# views.py
@method_decorator(login_required, name='dispatch')
class CourseCreateView(CreateView):
model = Course
template_name = 'course_form.html'
success_url = reverse_lazy('course-create-complete')
form_class = CourseForm
def get_initial(self):
initial = super(CourseCreateView, self).get_initial()
initial = initial.copy()
profile = get_object_or_404(Profile, user__username=self.request.user)
initial['instructor'] = profile
return initial
# models.py
class Course(models.Model):
instructor = models.ForeignKey(Profile, related_name="Instructor")
# ... other fields
를 제출하지만 probelm 인 경우 initial
에서 강사 값을 포함하여 프로파일 인스턴스를 전달 것이라고 생각하는 나는 다음과 같은 오류 얻을 형태로 제출 될 때마다 :
NOT NULL constraint failed: myapp_course.instructor_id
이 경우에는 제외하는 것이 더 좋은 해결책이라고 생각합니다. 그렇지 않으면 사용자 입력의 유효성을 검사해야합니다. 따라서 두 번째 해결 방법이 훨씬 더 좋습니다. –
... 그러나 나는 강사를 저장하기 위해 다시 작성할 수 있다고 생각한다. (그리고 나서'super (...)'를 반환한다.) –