教師のためのレビューを提出できるようにします。Django:フォーム処理エラー。別のモデルに関連付けられたフォームの処理
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:
:私は、次のフォームの取り扱いを持って
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:私は2つのモデルを持っています
何らかの理由で、私はまたelseループを取得するようです。例えば。フォームは有効ではありません。
Urls.py
url(r'^(?P<pk>[0-9]+)/$', views.teacher_view, name='detail')
全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' object does not support item assignment
'ReviewForm'では' model = Review'を使用しますが、初期データでは 'Teacher'モデルのインスタンスを提供します –
インスタンス=教師の部分ですか?それがない場合でも、私はまだ無効なフォーム – Roma