2016-12-27 50 views
0

確認它的形式之前修改的Django模型字段我有一個具有以下ATTR模型課程:如何訪問/ ListView中

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) 

所以基本上我的問題是如何在調用form.is_valid()之前將用戶添加到我的模型中。

回答

0

這樣的事情?

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) 
+0

什麼是copy.copy()?它說 NameError:名稱'copy'未定義 謝謝 – user7278236

+0

首先添加'import copy'。這是一個複製結構的模塊。我相信這是必須的,因爲'request.POST'是不可變的。 – yedpodtrzitko

+0

這是一個很好的方式來做到這一點。乾杯! – user7278236

0

此答案是由刪除此答案的用戶建議的。沒有得到他的用戶名,但無論你是誰非常感謝幫助!

只需使用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() 
相關問題