0

我正在构建简单的课程管理应用程序。我希望用户注册课程。这是注册模型:

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 参数。

4

2 回答 2

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 method() 是否有意义。我想我需要清理 course.id 以防万一,也许在保存之前验证一下?

于 2013-09-27T19:18:27.793 回答
0

你想要隐藏的输入:

<input type="hidden" name="user" value="{{request.user}}"/>

我会亲自将 course_id 作为上下文变量传递,而不是在 GET 中传递:

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

或者您可以使用 {{request.get_full_path}} 和一些切片从 url 字符串中获取值。

于 2013-09-27T17:39:01.847 回答