【发布时间】:2017-09-16 21:12:12
【问题描述】:
我希望能够为教师提交评论。我有 2 个模型:
models.py
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.PROTECT, related_name='Teacher')
class Review(models.Model):
teacher = models.ForeignKey(Teacher)
#other fields
def __str__(self):
return self.name
forms.py
class ReviewForm(forms.ModelForm):
class Meta:
model = Review
#Note no 'teacher' in fields below
fields = ('title','star','body')
views.py 我有以下表单处理:
def teacher_view(request,**kwargs):
teacher = Teacher.objects.get(pk=kwargs['pk'])
#if request.method == 'POST':
#handle the form
review_form = ReviewForm(request.POST, instance=teacher)
review_form.teacher=teacher
if review_form.is_valid():
review_form.save()
return redirect('users:index')
else:
出于某种原因,我似乎也得到了 else 循环。例如。表格无效。
Urls.py
url(r'^(?P<pk>[0-9]+)/$', views.teacher_view, name='detail')
Full Views.py
def teacher_profile(request, **kwargs):
teacher = Teacher.objects.get(pk=kwargs['pk'])
reviews = Review.objects.filter(teacher_id=kwargs['pk'])
star = Review.objects.filter(teacher_id=kwargs['pk']).aggregate(Avg('star'))
no_of_ratings = Review.objects.filter(teacher_id=kwargs['pk']).count()
if request.method == "POST":
if 'booking' in request.POST:
form = BookingForm(request.POST)
if form.is_valid():
#handle the form
return redirect('users:index')
else:
review_form = ReviewForm()
elif 'review' in request.POST:
review_form = ReviewForm(request.POST)
review_form['teacher']=teacher
if review_form.is_valid():
review_form.save()
return redirect('users:index')
else:
form = BookingForm()
else:
form = BookingForm()
review_form = ReviewForm()
else:
form = BookingForm()
review_form = ReviewForm()
return render(request, "users/teacher_detail.html", context={"form": form,
"review_form":review_form,
"teacher":teacher,
"reviews":reviews,
"star":star,
"no_of_ratings":no_of_ratings,
})
我再次添加了代码。我已经从我的views.py 中复制粘贴了它,但是删除了我只定义变量并重定向到另一个页面并显示成功消息的表单处理。
我认为为什么您的答案中的逻辑是错误的,因为它首先检查表单是否有效,这是无效的,因为缺少老师。然后我们在检查它是否有效之后定义教师。我尝试通过在form.is_valid() 之前添加review_form['teacher']=teacher 来操作代码,但总是得到错误:
'ReviewForm' 对象不支持项目分配
【问题讨论】:
-
在您的
ReviewForm中使用model = Review,但在初始数据中您提供Teacher模型的实例 -
你的意思是 instance=teacher 部分吗?即使它不存在,我仍然会收到无效的表格
标签: python django django-forms