[TIL]Djangoモデル
Django (models.py)
Djangoでは、データベースの設計に使用されるappディレクトリのmodelsです.pyファイルでは、すべてが実現されると言えます.
makemigrations、migrateコマンドはDjangoでデータベースを管理する重要なコマンドであり、この2つのコマンドはORMを可能にします.
ORMはオブジェクト関係マッピングの略で、韓国語ではオブジェクト-関係マッピングであり、オブジェクトが関係データベースに関連付けられる概念である.
オブジェクト向けにクラスの概念があり、リレーショナル・データベースにはテーブルの概念があります.
プログラミングにおいては、一般的にオブジェクト指向のパターンであり、リレーショナル・データベースを使用する際にオブジェクトの表示に拘束されず、オブジェクトを使用するように使用する技術と理解すればよい.
上記で宣言したクラスをデータベースにバインドしてテーブルにする場合は、manageを使用します.pyが存在するディレクトリでpythonを管理します.pymakemigrations「作成したアプリケーション名」を入力すると、モデルとしてmakemigrationsを実行します.pyでモデルを変更する事実(クラスの作成、変更、削除など).Djangoにmigrationとして保存したいと伝えます.ということで.
python manage.pymigrateを入力すると、上で生成したコードに基づいて自動的にsql構文に変換され、データベースに適用されます.テーブルが作成されます.
これにより、sql構文が分からなくてもmakemigrations、migrateでデータベースを制御できます.
Djangoでは、データベースの設計に使用されるappディレクトリのmodelsです.pyファイルでは、すべてが実現されると言えます.
from django.db import models
# Create your models here.
class Menu(models.Model):
name = models.CharField(max_length=20)
class Meta:
db_table = "Menus"
class Category(models.Model):
name = models.CharField(max_length=20)
menu = models.ForeignKey('Menu', on_delete=models.CASCADE)
class Meta:
db_table = "Categories"
class Drink(models.Model):
korean_name = models.CharField(max_length=100)
english_name = models.CharField(max_length=100)
category = models.ForeignKey('Category', on_delete=models.CASCADE)
description = models.TextField()
class Meta:
db_table = "Drinks"
class Allergy(models.Model):
name = models.CharField(max_length=100)
drink = models.ManyToManyField('Drink', through='Allergy_drink')
class Meta:
db_table = "Allergies"
class Allergy_drink(models.Model):
allergy = models.ForeignKey('Allergy', on_delete=models.CASCADE)
drink = models.ForeignKey('Drink', on_delete=models.CASCADE)
class Meta:
db_table = "Allergy_drinks"
class Nutrition(models.Model):
one_serving_kca = models.DecimalField(max_digits = 5, decimal_places = 2)
sodium_mg = models.DecimalField(max_digits = 5, decimal_places = 2)
saturated_fat_g = models.DecimalField(max_digits = 5, decimal_places = 2)
sugars_g = models.DecimalField(max_digits = 5, decimal_places = 2)
protein_g = models.DecimalField(max_digits = 5, decimal_places = 2)
caffeine_mg = models.DecimalField(max_digits = 5, decimal_places = 2)
drink = models.ForeignKey('Drink', on_delete=models.CASCADE)
size_mi = models.CharField(max_length=20)
size_fluid_ounce = models.CharField(max_length=20)
class Meta:
db_table = "Nutritions"
class Image(models.Model):
image_url = models.CharField(max_length=500)
drink = models.ForeignKey('Drink', on_delete=models.CASCADE)
class Meta:
db_table = "Images"
こんなモデルpyで作成されたクラスはDatabaseで作成されていると考えられます.ここでは、各入力値が何を意味するかは説明されません.Djangoを勉強したときに感じたのは、sql文法が分からなくてもPython文法を使ってデータベースを作成して管理できることです.makemigrations、migrateコマンドはDjangoでデータベースを管理する重要なコマンドであり、この2つのコマンドはORMを可能にします.
ORMはオブジェクト関係マッピングの略で、韓国語ではオブジェクト-関係マッピングであり、オブジェクトが関係データベースに関連付けられる概念である.
オブジェクト向けにクラスの概念があり、リレーショナル・データベースにはテーブルの概念があります.
プログラミングにおいては、一般的にオブジェクト指向のパターンであり、リレーショナル・データベースを使用する際にオブジェクトの表示に拘束されず、オブジェクトを使用するように使用する技術と理解すればよい.
上記で宣言したクラスをデータベースにバインドしてテーブルにする場合は、manageを使用します.pyが存在するディレクトリでpythonを管理します.pymakemigrations「作成したアプリケーション名」を入力すると、モデルとしてmakemigrationsを実行します.pyでモデルを変更する事実(クラスの作成、変更、削除など).Djangoにmigrationとして保存したいと伝えます.ということで.
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Category',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=20)),
],
options={
'db_table': 'Categories',
},
),
migrations.CreateModel(
name='Menu',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=20)),
],
options={
'db_table': 'Menus',
},
),
migrations.CreateModel(
name='Drink',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('korean_name', models.CharField(max_length=100)),
('english_name', models.CharField(max_length=100)),
('description', models.TextField()),
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='products.category')),
],
options={
'db_table': 'Drinks',
},
),
migrations.AddField(
model_name='category',
name='menu',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='products.menu'),
),
]
migrationsディレクトリが作成されます.上記のように、コードは自動的に生成されます.makemigrationsコマンドを入力したときにデータベースに適用されませんでした!python manage.pymigrateを入力すると、上で生成したコードに基づいて自動的にsql構文に変換され、データベースに適用されます.テーブルが作成されます.
これにより、sql構文が分からなくてもmakemigrations、migrateでデータベースを制御できます.
Reference
この問題について([TIL]Djangoモデル), 我々は、より多くの情報をここで見つけました https://velog.io/@chan_baek/TIL-Django-모델テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol