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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1051閲覧

pythonでクラスのリストを返す方法を知りたい。

Unknown_K

総合スコア1

Django

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/01 03:16

編集2020/11/01 08:22

前提・実現したいこと

クラスのリストを返す方法を知りたい。

pythonの勉強の一環としてdjangoを使ったWebサイトを作っていますが、
Modelで使用するデータベースにtinyDBを使いたいため、
django標準のmodelsを使わず、
modelsをimportしない自作のmodels.pyを作成し、その中のクラスで
tinyDBから全件レコードを取得し、クラスのインスタンスのリストをviews.pyの
中で取得したいです。

該当のソースコード

----views.py----

from models import log

def show_log(request):

logs = log() logs = logs.get_all -- logs = log.objects.all().order_by('time') django標準のモデルならこういうやり方でモデルのリストが取得できる

  for log in logs:
print log.time
print log.errormsg
....

----Models.py----
Class log(self):
.....
def init
self.time =""
self.errormsg =""
....
....
def get_all(self):
..... TinyDBから全件取得して、インスタンスのメンバ変数に値をセットして自身をリスト化して返却したい。

発生している問題

 初歩的な事で恐縮ですが、classを定義した際に、自分自身のリストを返却する
方法がわかりません。
ネットをしばらく漁ったのですがサンプルが見つかりませんでした。
将来的に、django標準のmodelにリファクタリングすることも視野に
同じような方法で、取得する方法としたいのです。
このような場合の定石や、情報へのパス等でも結構ですので、ご教授いただけると
助かります。

python3.X系

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

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

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

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

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

dodox86

2020/11/01 05:28

一瞬で回答がつきそうな質問に思いましたが、そうでもなかったのは、タグが"DB2"だけだったからかもしれません。PythonやDjango固有の話もあるので、それらのタグも付けておいた方がより回答が集まります。
Unknown_K

2020/11/01 08:26

その通りですね。失礼しました。
guest

回答1

0

ベストアンサー

classを定義した際に、自分自身のリストを返却する方法がわかりません。

一例ですが、リストにして返せばよいだけのことだと思います。

Python3

1class Log: 2 def __init__(self, time=''): 3 self.time = time 4 self.errormsg = "" 5 6 def get_all(self): 7 # 全件取得してリストにして返すサンプル 8 objs = [] 9 objs.append(Log('12')) 10 objs.append(Log('34')) 11 objs.append(Log('56')) 12 objs.append(Log('78')) 13 14 return objs 15 16log = Log() 17logs = log.get_all() 18for item in logs: 19 print(item.time) 20 21''' 22実行例: 23$ python3 t1.py 2412 2534 2656 2778 28'''

このような場合の定石や、情報へのパス等でも結構ですので、ご教授いただけると

1件のログ要素を表すクラスで全件のログを返すメソッドを用意するのは、クラスの役割が少し過ぎるように思います。
私だったらまず、ログの1件(DBで言えば1行のROW)を表すLogクラス、更にログの全体(DBで言えば全件、あるいはSELECTで抽出したROWの集合)を表すLogsのクラスに分けます。ですが、Djangoを使う際の標準の用法(≒Django特有の事情)であれば、それも理解できます。

投稿2020/11/01 05:24

dodox86

総合スコア9256

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

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

Unknown_K

2020/11/01 12:17

ご教授いただいたコードを参考に無事、実装できました。ありがとうございました。 (pythonのリスト型に対する理解とセンスが足りないようです。勉強します)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問