2013-09-27 132 views
0

我正在構建簡單的課程管理應用程序。我希望用戶註冊課程。這裏註冊模式:Django表單:使用request.user和url參數預填充表單

class CourseMembers(models.Model): 
    student = models.ForeignKey(Student) 
    course = models.ForeignKey(Course) 

    def __unicode__(self): 
     return unicode(self.student) 

學生模型被擴展用戶模型 - 我想用request.user來填寫表單。 在課程模型中最重要的是course_id,我通過URL參數傳入視圖(例如http://127.0.0.1:8000/courses/course/1/)。

我想實現的目的是通過輸入生成'不可見'(因此用戶無法更改插入的數據)形式,但只包含request.user和course_id參數。

+0

你想向他們展示這些領域嗎?您是使用基於類的視圖還是僅使用基於視圖的功能? –

+0

不,我不想顯示任何字段,只需輸入發送request.user和course_id後的按鈕。我正在使用基於功能的視圖。 – Malyo

回答

0

你想隱藏的輸入:

​​3210

我想通過在COURSE_ID作爲上下文變量個人,而不是在GET:

<input type="hidden" name="course_id" value="{{course_id}}"/> 

或者你也可以從URL中獲得的價值字符串使用{{request.get_full_path}}和一些切片。

+0

嗯,這不完全是我的問題。事情是我真的不需要任何輸入字段,因爲這兩個值都出現在我的視圖中,我只是不知道如何通過django形式助手和POST請求保存這些值 – Malyo

+0

這正是你如何做到 - 這些是隱藏的表單值 - 通過POST中的表單傳遞數據的唯一方法。 – professorDante

0

我找到了我自己的問題的答案。因此,這裏是一步一步: 首先,我們需要刪除的所有字段中的ModelForm:

class AddCourseMemberForm(forms.ModelForm): 

    class Meta: 
     model = CourseMembers 
     fields = {} 

由於沒有數據,我們希望通過用戶輸入得到的,我們只需發送空POST請求,然後直接插入數據我們的表單模型,然後將其保存:

if request.method == 'POST': 
    form = AddCourseMemberForm(request.POST) 
    if form.is_valid(): 
     form = form.save(commit=False) 
     form.student_id = user.id #from request.user 
     form.course_id = course.id #from url parameter i.e courses/course/1/ 
     form.save() 
     return redirect('index') 

由於我還在學習,我需要知道這是做事情的安全的方式,以及是否is_valid()的方法是有道理的。我想我需要清理course.id以防萬一,也許在保存之前進行驗證?