質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
Django

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

Python 3.x

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

Q&A

解決済

2回答

332閲覧

djangoのチュートリなど

ayumuKi

総合スコア17

Django

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

Python 3.x

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

0グッド

0クリップ

投稿2019/03/26 04:13

djangoのチュートリアルの質問です

def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

これは具体的に何をしているのでしょうか。

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

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

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

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

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

quickquip

2019/03/26 04:20

分からない部分はどこですか? 調べたことはなんですか?
ayumuKi

2019/03/26 07:34

djangoのチュートリを行っていましたら、これが出て来ました。モデル内で関数を作って、どのようにして使って行くのがわかりませんでした。
guest

回答2

0

実はこの関数は、

  • モデルにカスタムな手続き(関数)を追加するにはどうするのか?
  • モデルのデータ(属性)をそのまま出すのではなくて、それを加工するにはどうするのか?
  • それをテストするにはどうするのか?
  • 加工した結果を表示するにはどうするのか? どのようにカストマイズするのか?

といった説明のために書いているものであって、作っていくアプリケーションの中で必要な機能なわけではないのですよね。
(だから混乱したのだと思いますが)

この関数の中身が読めないなら読めないでも構わなくて、関数名からだいたいなにをするのか判れば十分ですね。(追記: と思ったのですが、テストのところでは中身がわかってないとまずいですね)
このような関数が書けること、関数名の結果を表示できることがチュートリアルの説明したいことなのでしょうから。

投稿2019/03/26 08:13

編集2019/03/26 09:23
quickquip

総合スコア11038

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

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

ayumuKi

2019/03/26 08:26

ありがとうございます。モデルのデータを関数を定義してすることによって値を変化させることができるという解釈でよろしいでしょうか。
quickquip

2019/03/26 09:22

値は変化しないです。取り出して加工して表示する方法の説明です。
ayumuKi

2019/03/26 10:02

理解しました。ありがとうございました。
guest

0

ベストアンサー

前提として、self.pub_datetimezone.now()datetimeオブジェクトです。これは日時を表す型です。ドキュメントか適当な解説サイトを読んで仕様を把握しておいてください。

https://docs.python.org/ja/3/library/datetime.html


とりあえず式の部分だけ抜き出します。

python

1self.pub_date >= timezone.now() - datetime.timedelta(days=1)

評価の順序を考えます。

python

1(self.pub_date) >= (timezone.now() - datetime.timedelta(days=1))

左辺はあまり意味がない(単なるインスタンスの属性)ので、右辺について考えます。

python

1timezone.now()

現在の時刻(at タイムゾーン)を取得します。

python

1datetime.timedelta(days=1)

timedeltaは時間差を表現する型です。days=1なので1日の時間差を表します。詳細はドキュメントを読んでください。

https://docs.python.org/ja/3/library/datetime.html#timedelta-objects

python

1timezone.now() - datetime.timedelta(days=1)

現在の時刻から1日引き算したので、昨日の同じ時刻ということになります。

改めて式の全体を見ます。

python

1(self.pub_date) >= (timezone.now() - datetime.timedelta(days=1))

self.pub_dateは投稿日時とかでしょう。これが一日前の同じ時刻より大きいという条件なら、過去1日以内に投稿された記事ならTrueに、そうでなければFalseになります。

python

1def was_published_recently(self): 2 return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

「最近投稿されましたか?」といったメソッド名ですので、やはりこれを呼べば最近(一日以内)投稿されたかどうかがわかるのだと思います。

投稿2019/03/26 04:21

編集2019/03/26 04:23
hayataka2049

総合スコア30933

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

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

ayumuKi

2019/03/26 07:32

わかりやすい解説ありがとうございました。True、falseが出るのですね。このメソッドはテンプレートとかで使って行く感じなのでしょうか。モデル内の関数を作ってどう使って行くのかをまだあまり理解できていない者で、なぜこのメソッドを作ったのかがわかりませんでした。
hayataka2049

2019/03/26 07:33

これが呼び出されてるところを見て理解していくといいかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問