Closed duri0214 closed 4 months ago
単に機能作ってないだけ?
はい、その通りです。Django の CreateView を使用する場合、どのモデルに対する操作を行うのかを指定する必要があります。指定する方法は主に2つあり、一つは model 属性を設定する方法、もう一つは get_queryset メソッドをオーバーライドする方法です。 上のエラーは ClassificationCreateView というビューにモデルが関連付けられていないために発生しています。エラーメッセージにも指示が書かれており、「ClassificationCreateView.model」を定義するか、「ClassificationCreateView.queryset」を定義するか、または、「ClassificationCreateView.get_queryset()」をオーバーライドしてください、と言っています。 つまり以下のように、ClassificationCreateView 内に model 属性を追加すると問題が解決するはずです。ここでは Classification という名前のモデルを使用していますが、適切なモデル名に変更してください
from your_app.models import Classification # モデルをインポート class ClassificationCreateView(CreateView): model = Classification # モデルを指定 success_url = reverse_lazy("txo:index")
ただし、この model 属性または get_queryset メソッドを偽装するか、新たに実装するというのは、CreateView がどのモデルの作成画面を表示するのか、あるいはどのモデルに対するレコード作成を行うのかに関する情報が必要であるというDjangoの仕様から来ています。モデルが選択されない限り、CreateView はどのようにデータベースと対話するべきかわからないため、エラーが発生します。 したがって、この機能を「作らなかった」、という認識はあっています。それを「作る」ためには、Djangoが求めている情報を提供しなければなりません。具体的には、どのモデルを扱うのかという情報を指定する必要があります。
概要
単に機能作ってないだけ?
状況
はい、その通りです。Django の CreateView を使用する場合、どのモデルに対する操作を行うのかを指定する必要があります。指定する方法は主に2つあり、一つは model 属性を設定する方法、もう一つは get_queryset メソッドをオーバーライドする方法です。 上のエラーは ClassificationCreateView というビューにモデルが関連付けられていないために発生しています。エラーメッセージにも指示が書かれており、「ClassificationCreateView.model」を定義するか、「ClassificationCreateView.queryset」を定義するか、または、「ClassificationCreateView.get_queryset()」をオーバーライドしてください、と言っています。 つまり以下のように、ClassificationCreateView 内に model 属性を追加すると問題が解決するはずです。ここでは Classification という名前のモデルを使用していますが、適切なモデル名に変更してください
ただし、この model 属性または get_queryset メソッドを偽装するか、新たに実装するというのは、CreateView がどのモデルの作成画面を表示するのか、あるいはどのモデルに対するレコード作成を行うのかに関する情報が必要であるというDjangoの仕様から来ています。モデルが選択されない限り、CreateView はどのようにデータベースと対話するべきかわからないため、エラーが発生します。 したがって、この機能を「作らなかった」、という認識はあっています。それを「作る」ためには、Djangoが求めている情報を提供しなければなりません。具体的には、どのモデルを扱うのかという情報を指定する必要があります。