Django:在CreateVi中为ForiegnKey设置初始值

2024-09-22 14:36:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建CreateView类型的视图。此视图将采用我创建的form_class = CourseForm,并在其中排除了一些字段。instructor字段是一个foriegnKey,我不希望用户能够在表单中控制它。它是一个取决于登录用户的字段。在

# forms.py
class CourseForm(forms.ModelForm):
    class Meta:
        model = Course
        exclude = ['instructor', 'members', 'slug']
    # ...

我的观点如下。我认为通过在initial中包含指导者值,可以在提交时传递概要文件实例

^{pr2}$

但问题是,每当我提交表格时,都会出现以下错误:

NOT NULL constraint failed: myapp_course.instructor_id


Tags: 用户pyform视图表单类型modelforms
1条回答
网友
1楼 · 发布于 2024-09-22 14:36:04

如果要设置instructor字段的初始值,则不应将其从表单中排除。你可以把字段隐藏起来。在

或者可以将其包含在exclude列表中,但不应重写get_initial方法,而是手动执行分配:

class CourseCreateView(CreateView):
    def form_valid(self, form):
        self.object = form.save(commit=False)
        # create instructor based on self.request.user
        self.object.instructor = instructor
        self.object.save()
    return HttpResponseRedirect(self.get_success_url())

检查关于what does ^{} do.的django文档

还要检查关于form_valid函数和how forms are handled in class based views.的django doc

相关问题 更多 >