0

シンプルなコース管理アプリを構築しています。ユーザーにコースにサインアップしてもらいたい。サインアップモデルは次のとおりです。

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

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

Student モデルを拡張 User モデル - フォームに request.user を入力したい。Course モデルで最も重要なのは 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 に答える