我创建了一个模型 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/