как получить доступ / изменить поля модели django перед проверкой его формы в Listview

У меня есть модельный курс, который имеет следующий attr:

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

**Вот мой views.py где я борюсь с **

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)

Поэтому в основном мой вопрос заключается в том, как я могу добавить пользователя в мою модель перед вызовом формы.is_valid ().

2 ответа

  1. что-то вроде этого?

    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)
    
  2. Этот ответ был предложен пользователем, который удалил этот ответ. Не получил свой идентификатор пользователя, но кто бы вы ни были Большое спасибо за помощь!!!

    Просто используйте форму.сохраните (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()