duri0214 / portfolio

0 stars 1 forks source link

taxonomyのリンクでバグ #33

Closed duri0214 closed 4 months ago

duri0214 commented 5 months ago

概要

単に機能作ってないだけ?

image image

状況

はい、その通りです。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が求めている情報を提供しなければなりません。具体的には、どのモデルを扱うのかという情報を指定する必要があります。