🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

892閲覧

Djangoで親クラスとして呼び出すと子クラスのメソッドが呼び出せない

Rikunosuke

総合スコア6

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/10/15 17:04

編集2019/11/05 15:31

##作りたいもの
ユーザーが自分の趣味やスキルなどをテキストベースで紹介するポートフォリオサイト的なもの

##やりたいこと

Python

1class Box(models.Model): 2 title = models.CharField(max_length=50) 3 order = models.PositiveIntegerField() 4 5 6 def __str__(self): 7 return self.title 8 9 def description(self): 10 return self.title 11 12class TextBox(Box): 13 text = models.TextField(max_length=400) 14 15 def description(self): 16 return super().description + self.text 17 18class RatingBox(Box): 19 item = models.CharField(max_length=50) 20 rate = models.PositiveIntegerField() 21 22 def description(self): 23 return super().description() + self.item + "☆"*self.rate 24

上のようなBoxモデルを継承して子モデル(TextBox, RatingBox)をいくつか作り、全ての子モデルがdescriptionメソッドを持っています。この時、

python

1context = { 2 "object_list":Box.objects.all() 3}

をテンプレートに送り、子モデルのdescriptionメソッドをテンプレート内で呼び出したいのですが、親モデルの方が呼び出されてしまいます。解決策はあるのでしょうか。

##補足
ユーザーにTextBoxやRatingBoxが紐づいており、orderを設定することによりどの順番で表示させるかを決めることができます。Requestを送ったユーザーのBoxをcontextとして送信し、orderの順番通りに並べたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/10/16 03:45

context = { "object_list":TextContext.objects.all() } ではなくて、ですか?
Rikunosuke

2019/10/16 09:56

返信ありがとうございます。 質問が分かりずらかったので、わずかに変更しました。 変更後のコードで、 context = { "object_list":Box.objects.all() } で取得し、templateでTextBox と ListBox のdescription() を使いたいです。方法をご存知でしたら回答よろしくお願いします。
guest

回答1

0

TextBoxクラスを、Boxクラスを継承する形で作るのではなく、TextBoxクラス内に、titleと言う項目をBoxクラスを参照するForeginKeyとして定義するのが良いかと思います。
(RatingBoxも同様)

投稿2019/10/29 00:10

ak_suzuki

総合スコア194

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Rikunosuke

2019/11/05 15:22

返信が遅くなってしまい申し訳ありません。回答ありがとうございます。このやり方ですと、TextBoxとRatingBoxの二つを一括で参照できなくなってしまうと思うのですが、解決策はあるのでしょうか。質問に具体的にやりたいことを追加しましたので回答よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問