【发布时间】:2015-11-22 12:13:31
【问题描述】:
我有一个表格:
class CourseStudentForm(forms.ModelForm):
class Meta:
model = CourseStudent
exclude = ['user']
对于有一些复杂要求的模型:
class CourseStudent(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
semester = models.ForeignKey(Semester)
block = models.ForeignKey(Block)
course = models.ForeignKey(Course)
grade = models.PositiveIntegerField()
class Meta:
unique_together = (
('semester', 'block', 'user'),
('user','course','grade'),
)
我希望新对象使用 CourseStudent.user 的当前登录用户:
class CourseStudentCreate(CreateView):
model = CourseStudent
form_class = CourseStudentForm
success_url = reverse_lazy('quests:quests')
def form_valid(self, form):
form.instance.user = self.request.user
return super(CourseStudentCreate, self).form_valid(form)
然而,这可行,因为用户不是表单的一部分,它错过了 Django 否则会使用 unique_together 约束进行的验证。
如何让我的表单和视图使用 Django 对这些约束的验证,而不必自己编写?
我虽然在表单的隐藏字段中传递用户(而不是排除它),但这似乎不安全(即用户值可以更改)?
【问题讨论】:
标签: django django-forms django-views