カテゴリー
サインイン 新規登録

間違いや改善の指摘

内容の技術的な誤り・誤字脱字やミスのご報告・解説やトピックの追記/改善のご要望は教材をさらに良くしていく上でとても貴重なご意見になります。

少しでも気になった点があれば、ご遠慮なく投稿いただけると幸いです🙏

実際には誤りではなく勘違いであっても、ご報告いただけることで教材のブラッシュアップにつながります。

質問ポリシー①

教材受講者みなさんのスムーズな問題解決のために、心がけていただきたいことがあります。

教材の内容に関する質問を投稿しましょう

教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。

その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。

8-3

フォームの作成

このパートでは、商品詳細画面に表示するレビュフォームを作成していきます。

レビュフォーム作成

ここではdjangoが用意しているModelFormクラスを継承して、独自フォームを作成することにします。
ModelFormクラスは、モデルを指定することで、そのモデルのフィールドを紐づいたフォームを自動的に生成してくれるクラスになり、モデルと密接に紐づくフォームを作成する際に非常に便利です。

アプリフォルダ内のforms.pyを修正していきます。

Copied!
techpit/ amazon/  ├ static/  ├ fixtures/  ├ __init__.py  ├ apps.py  ├ models.py  ├ forms.py ← 修正  ├ views.py   ├ admin.py  ├ migrations/  └ test.py

forms.pyに以下を追加しましょう。

amazon/forms.py
12345678910111213
Copied!
## 中略 ## class ReviewForm(forms.ModelForm): class Meta: model = Review exclude = ('user', 'product') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs['class'] = 'form-control' field.widget.attrs['placeholder'] = field.label # placeholderにフィールドのラベルを入れる self.fields['rating'].widget.attrs['style'] = 'display:none'

Metaクラスにて紐づけるモデルを指定し、excludesにはフォームに含めない項目を指定しています(外部参照しているユーザモデルやその時参照している商品モデルについてはユーザに入力はさせないので省いています)。
また__init__関数の最後に、ratingフィールドのウィジットを非表示にしていますが、これは、評価の星をつける部分はフォームが生成するものではなく、外部のJSの部品を用いるように実装するためです。

以上で今回のパートは終了です。

お疲れ様でした。