hikaru’s diary

Django Engineer

【Django】モデルについていろいろ書く#2

前回: 【Django】モデルについていろいろ書く#1 - hikaru’s diary

リレーション
# ドキュメントから引用
リレーショナルデータベースの強力さがテーブル同士の関係によって決まることは疑いがありません。Dango では、最も一般的な 3 つのデータベースリレーションシップを定義しています: 多対 1、多対多、1 対 1 です。

多対1にはForeignKeyを使用し、多対多にはManyToManyFieldを使用するそうです。
ForeignKeyはORMを使うと

<p>名前:{{ p.number.name }}</p>
a = Person.objects.filter(number.name='name')

って感じで楽に書けます。

Metaオプション

メタデータを設定することができます。

# ドキュメントから引用
from django.db import models

class Ox(models.Model):
    horn_length = models.IntegerField()

    class Meta:
        ordering = ["horn_length"]
        verbose_name_plural = "oxen"

そのほかのオプションについてはこちらにあります。
Model Meta options | Django ドキュメント | Django

継承

modelクラスを継承します。

# ドキュメントから引用
from django.db import models

class CommonInfo(models.Model):  # テーブルは作成されない
    name = models.CharField(max_length=100)
    age = models.PositiveIntegerField()

    class Meta:
        abstract = True

class Student(CommonInfo):  # CommonInfoから継承
    home_group = models.CharField(max_length=5)

他にconstraints,verbose_name,verbose_name_plural辺りは必須。
init.pyを作ってfrom .models import * と書くと複数ファイルに分けることが出来ます。


次回はクエリの書き方を書きます。お疲れ様でした。