Django のモデルは、Database のテーブルやコレクションを表現するクラスです。
これはテーブルに関する全ての情報を含みます。
これらのモデルは、Django アプリの models.py ファイルに一緒に保存されます。
ユーザ DB、ブック DB、または Web アプリケーションが必要とする他のテーブルのような、異なる情報を含む異なる DB のための多くの異なるモデルが存在することができます。
Django モデルの基本構造
class Modelname(models.Model):
'''A class representing a model derived from Model class'''
#Fields
Field_name = models.CharField(max_length = , hepl_text = , choices = , Null etc)
#Metadata
class Meta:
Ordering = [‘field_name’]
#Methods
def __str__( self ):
return '<readable_name>'
|
1. モデル内のフィールド
特定のモデルは任意の数のフィールドを持つことができ、これらはデータベーステーブルの様々な属性を表します。
フィールドには多くの異なるタイプがあります
- CharField
- 整数値
- 電子メール
これらのフィールドは、以下のような引数を取ることもできます。
max_length – 入力可能な最大文字数。
2. 2. プライマリキー – このフィールドが全てのエントリで一意であることを Django に伝えます。
3. 3. 外部キー – これは、あるモデルと別のモデルを接続するために使われます。
4. 4. NULL – true の場合、空のフィールドは NULL 値に変換され、char フィールドは空文字列と して扱われます。
5. 5. 選択肢 – フィールドが与えられた選択肢のうちの1つだけでなければならない場合(オプションボックスのようなもの)
6. 6. 空白 – trueの場合、フィールドは空白にすることができ、それ以外は埋めなければなりません。
2. モデルメタデータ
このメタデータには様々な機能があり、その中でも重要なのが順序付けです。
これは、データベース上でその要求を出したときに、特定の順番で回答を表示することができます。
構文は以下の通りです。
ordering [ '<Name>' ]
|
例えば、がCharFieldの場合はアルファベット順、IntergerFieldの場合は数値の昇順などです。
もし、構文に”-“記号が使われている場合は、逆順になることを意味します。
ordering [ - '<name>' ]
|
3. Django モデルにおけるメソッド
これらは、より良いクライアントインタフェース、つまり、より良いプレゼンテーションのために使用されます。
例えば、 _str ³³ は、データベース内の各特定要素について、管理サイトで何を表示するか (短い名前のようなもの) を指示します。
ここで、以下の情報を持つBooksのプロジェクトを作成してみましょう。
- すべての本についての情報を持つホームページ
- 全ての本に関する情報を含むホームページ。(これは Django の URL マッピングで見ました)
そのために、これまでの記事で得た知識を使って、books という名前のアプリを作 りましょう。
この記事もチェック:Python Djangoのアプリ構成とプロジェクト構成を分かりやすく解説
1. 最初の Django モデルを作成する
books/models.py で、タイトル、価格、ジャンルを属性として持ち、メタデータの順序をタイトルにしたモデル DB を作ってみましょう。
python manage.py migrate python manage.py makemigrations <app_name> Python manage.py sqlmigrate <app_name> 0001 |
次に、このテーブルをデータベース内に作成する必要があります。
デフォルトでは、 Django は SQLite データベースエンジンを使用します。
今のところ、この DB 自体を使うことにします。
使用している DB は settings.py の DATABASES で確認できます。
Python manage.py migrate |
2. データベースにテーブルを作成する
テーブルを作成するために、まずマイグレーションを適用する必要があります。
以下のコードをシェルで書いてください。
python manage.py shell |
そしてもう一度、実行します。
from <app_name>.models import <model_name>
|
出力は、データベースの作成が成功したことを示します。
モデルテーブルが SQLite で準備できました。
モデルに変更を加えるたびに、DBのテーブルにも変更を加えるために、上記のステップを繰り返す必要があることに注意してください。
では、DBにデータを取り込み、追加する方法を学びます。
DBから情報を取得する
まず、ディレクトリの中でPythonシェルを開き、次のコマンドを実行します。
<model_name>.objects. all ()
|
これにより、シェルの中にPythonコンソールが表示されるようになります。
モデルテーブルから情報を追加/取得するために、モデルテーブルをインポートする必要があります。
テーブルをインポートするためのシンタックスは以下の通りです。
BookModel.objects. all ()
|
私の場合、次のようになります。
A = <model_name>()
|
1. 1. レーブルからすべてのオブジェクトを取得する
このために、次の構文を使います。
A.Title = "Harry Potter"
A.Price = 120
A.Genre = "Fantasy Fiction"
A.save() |
したがって、私のコードは次のようになる。
<Model_name>.objects. filter (Title = ”<Title_Element>”)
|
2. テーブルへの情報の追加
情報を追加するための構文は、オブジェクト指向のPythonの構文に似ています。
ここでは、まずモデル名でクラスオブジェクトを作成し、必要な属性を追加します。
オブジェクトを作るには、次のような構文になります。
<model_name>.objects.get(Title = < "title_element" >)
|
例えば、以下の様になります。
a = BookModel.objects.get(title = "Ghostbuster" )
|
こうして、最初の本の情報が入力されました。
同じように、もう少し追加してみます。
a.title() a.price() a.genre() |
3. DB からレコードをフィルタリングする
Django のモデル Database からレコードをフィルタリングするために、以下を実行します。
from books.models import BookModel a =BookModel.objects.get(title= "<book_name" >)
a.delete() |
したがって、例えば、ジャンルが Fiction である本を全てフィルタリングする場合
def BookView(request):
books = BookModel.objects. all ()
html = ''
for book in books:
var = f '<li> {book.title} </li><br>'
html = html + var
return HttpResponse(html,status = 200 )
|
4. 4. ある要素に関する完全な情報の取得
注意: filter を使用する場合、要素は短い形式で取得されます (def s_str __) しかし、要素に関する完全な情報が必要な場合は、次のメソッドを使用します。
ここでは、タイトル、価格、ジャンルなどすべての情報を取得できます。
このとき
このとき、すべての情報はオブジェクトとして格納されるので、以下のように実装すれば、対応する値を表示することができます。
5. DBから行要素を削除する
特定の要素を削除するには、.delete() という構文を使用します。
views.py を使ってモデル DB に接続する
次に、DBから情報を取得し、それをWebページに表示する方法を学びます。
Views.pyに以下のコードを追加します。
このコードから、基本的にDBの情報を変数booksに取得し、DBから各要素を取得し、HTMLとしてWebページに表示するループを開始したことが理解できると思います。
また、このViewのエンドポイント(Books/)を提供する必要があります。
Django-URL マッピングの記事から得た知識を元に、自分で試してみてください。
さて、Web ページ (books/
以下のコードを見て、理解を深めてください。
このコードは単純で、Getを使ってbooks_nameに関する全ての情報を取得し、HTMLとしてウェブページに表示しているだけです。
ここでは、DBから特定の情報を取得し、それをWebページに表示しています。
このViewに対して、urls.pyがどのように見えるか見てみましょう。
では、サーバを起動して動作するか確認します。
書籍/ウェブページ用のブラウザページ
books/
外部キーによる他のモデルへの接続
外部キー(FK)は、共通の情報を使用している2つのデータベースをリンクさせるために使用されます。
これにより、データベースをきれいに保つことができ、また、同じ情報を何度も入力する必要がなくなります。
次に、Booksアプリで著者モデルテーブルを作成し、Bookモデル内にAuthor Filter_idフィールドを追加してみましょう。
ここで、複数の書籍が同じAuthorを持つ可能性があるため、Author_tery_idはBookModelの外部キーとして動作することに注意してください。
FKを使用すると、特定の著者によって書かれた様々な本を検索することができます。
また、もし著者がアカウントを削除した場合、彼のすべての本も自動的に削除され、BookModel から手動で削除する作業を減らすことができます。
最初のうちは少し戸惑うかもしれませんが、何度も練習していくうちに、だんだん分かってくるはずです。
これで、BookModel に Author フィールドを追加することができます。
新しい AuthorModel のために migrations を実行する必要があります。
また、BookModelのDBを変更したので、前述のシェルコード(migrations)を実行する必要があることに注意してください。
データベースには、Author フィールドを除いたいくつかの情報が既にあります。
そのため、Django はそれらのために author_id フィールドにデフォルト値を入力するように要求します。
.delete() を使って移行を適用する (テーブルを変更する) 前に、以前の要素をすべて削除することが望ましいです。
これで、本の情報を追加したのと同じように、著者 DB に情報を追加できるようになりました。
また、練習として、BookViewと同じようにAuthor Viewを自分で作ってみてください。
ここまでで、シェルからテーブルにデータを入力することを学びましたが、これは最も効率的なデータの追加方法ではありません。
一番簡単な方法は、管理画面からデータを追加することです。
その方法については、次回以降に説明します。
また、管理サイトからは、このFK全体の働きや、FKを通じてAuthor DBとModel DBがどのようにリンクされているかなど、より詳しい情報を得ることができます。
この記事もチェック:DjangoでのMySQLの使い方|インストールや接続、データ取得等を解説
まとめ
以上で、本記事は終了です。
次回は、管理サイトのインターフェイスについて学び、FKの有用性をより良く理解する予定です。
</name