在Listview中验证django模型表单之前,如何访问/修改django模型字段

在Listview中验证django模型表单之前,如何访问/修改django模型字段,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我有一个具有以下属性的示范课程: class Course(models.Model): user= models.ForeignKey( User, on_delete=models.CASCADE, ) # email= models.EmailField(default=user.email) courseName= models.CharField(max_length=20, blank=False) c

我有一个具有以下属性的示范课程:

class Course(models.Model):
    user= models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        )
    # email= models.EmailField(default=user.email)
    courseName= models.CharField(max_length=20, blank=False)

    class Meta:
        unique_together= ('user','courseName',)


    def __str__(self):
        return self.courseName
我已经创建了一个表单,我希望用户只输入courseName,在他们发布它之后,我也会将请求的用户添加到模型中

这是我的表单,它将通过我的ListView传递到模板

forms.py

class CourseForm(forms.ModelForm):
    class Meta:
        model= Course
        fields = ['courseName']
**这是我正在努力解决的问题**

class CoursesListView(ListView, FormMixin):
    model = Course
    form_class = CourseForm
    template_name = "userApp/courseList.html"

    def get_queryset(self):
        return Course.objects.filter(user__exact=self.request.user)

    def get_context_data(self,*args,**kwargs):
        context= super(CoursesListView,self).get_context_data(*args, **kwargs)
        context['courseForm'] = self.form_class
        return context

    def post(self,request, *args, **kwargs):
        form = self.form_class(request.POST)
        user = User.objects.get(username__exact=self.request.user)

        **I want to add the user to my model.user field here**

        return self.get(redirect, *args, **kwargs)

    def get(self,request, *args, **kwargs):
        self.object=None
        self.form = self.get_form(self.form_class)
        return ListView.get(self, request, *args, **kwargs)
因此,基本上我的问题是,在调用表单之前,如何在模型中添加用户

def post(self,request, *args, **kwargs):
    form_data = copy.copy(request.POST)
    form_data['user'] = User.objects.get(username__exact=self.request.user).pk
    form = self.form_class(form_data)

    # form handling follows

    return self.get(redirect, *args, **kwargs)

此答案是由删除此答案的用户建议的。没有得到他的用户id,但是无论你是谁,都非常感谢你的帮助

只需使用form.save(commit=False),然后进行必要的更改

def post(self,request, *args, **kwargs):
    form = self.form_class(request.POST)
    if form.is_valid():
        user = User.objects.get(username__exact=self.request.user)
        instance = form.save(commit=False)
        instance.user = user
        instance.save()

什么是copy.copy()?它显示NameError:name“copy”未定义。请先导入副本。这是一个复制结构的模块。我认为这是必要的,因为
request.POST
是不可变的。