python - Django,保存模型窗体

标签 python django django-forms

我创建了一个模型 Student,它从 Django 用户 扩展而来,是另一个模型的外键,同时它有一个名为 year 的整数字段。我想要做的是保存一个表单,它有 2 个字段。一个是类(class)ID,另一个是整数字段year。当我点击提交时,我收到一个错误Cannot assign "u'2'": "Student.course"must be a "Course"instance.

models.py

class Student(models.Model):
    user = models.OneToOneField(User)
    course = models.ForeignKey(Course)
    year = models.IntegerField(validators=[MinValueValidator(1),
                                           MaxValueValidator(7)])

view.py

def step3(request):
    user = request.user
    if request.method == 'POST':
        form = SelectCourseYear(request.POST)
        if form.is_valid():
            form.save()
            return render_to_response("registration/complete.html", RequestContext(request))
    else:
        form = SelectCourseYear()
    return render(request, 'registration/step3.html',)

forms.py

class SelectCourseYear(forms.ModelForm):
    course = forms.CharField()
    year = forms.IntegerField(required=True)

    class Meta:
        model = Student
        fields = ['user', 'course', 'year']

最佳答案

如果您已经在 fields 属性中提及它们,则不需要重新定义 ModelForm 中的字段。所以你的表单应该是这样的 -

class SelectCourseYear(forms.ModelForm):
    class Meta:
        model = Student
        fields = ['course', 'year'] # removing user. we'll handle that in view

我们可以在 View 中轻松处理表单 -

def step3(request):
    user = request.user
    if request.method == 'POST':
        form = SelectCourseYear(request.POST)
        if form.is_valid():
            student = form.save(commit=False)
            # commit=False tells Django that "Don't send this to database yet.
            # I have more things I want to do with it."

            student.user = request.user # Set the user object here
            student.save() # Now you can send it to DB

            return render_to_response("registration/complete.html", RequestContext(request))
    else:
        form = SelectCourseYear()
    return render(request, 'registration/step3.html',)

关于python - Django,保存模型窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22739701/

相关文章:

具有大对象的 Python 多处理 : prevent copying/serialization of object

python - 如何使用 python 和 openssl 验证 webhook 签名

django - 为什么django redis缓存取不到redis中的数据

用于多对多模型的 Django 表单。如何从 View /模板中填写表格?

python - Django 表单操作 "."重新加载缺少 slug 的同一页面

django - Django unique_together与可为空的ForeignKey

python - 如果之前使用过参数,则防止多次调用函数

Python 从字符串数组生成字典顺序输出

python - 提交表单时,Django 会自动为外键赋值吗?

python - numpy 数组索引表示超出范围