LoginSignup
1
5

More than 5 years have passed since last update.

Djangoアプリの作成

Last updated at Posted at 2017-06-19

アプリをgeneratorで作成する

$ python3 manage.py startapp sampleapp

コミットするとこんな感じ

$ git commit
[master 02968a1] create new app named `sampleapp`
 7 files changed, 17 insertions(+)
 create mode 100644 sampleapp/__init__.py
 create mode 100644 sampleapp/admin.py
 create mode 100644 sampleapp/apps.py
 create mode 100644 sampleapp/migrations/__init__.py
 create mode 100644 sampleapp/models.py
 create mode 100644 sampleapp/tests.py
 create mode 100644 sampleapp/views.py

settings.pyに作成したアプリを登録しておく。

diff --git a/mysite/settings.py b/mysite/settings.py
index d78d9be..e2b99d3 100644
--- a/mysite/settings.py
+++ b/mysite/settings.py
@@ -37,6 +37,7 @@ INSTALLED_APPS = [
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
+    'sampleapp',
 ]

Model作成

サッカーチームを登録するEntityでもつくってみる。

mysite/sampleapp/models.py
from django.db import models
from django.utils import timezone

class ClubTeam(models.Model):
    author = models.ForeignKey('auth.User')
    name = models.CharField(max_length=100)
    created_date = models.DateTimeField(default=timezone.now) 

    def __str__(self):
        return self.name

__str__は特殊なメソッド。Object::toString()みたいな感じで、printにObjectを渡したときも呼ばれるとのこと。とりあえずnameプロパティを返却するようにしてみた。

DBに定義を渡す

マイグレーション生成

モデル定義をmodels.pyに書いたので、マイグレーションを生成する。

$ py3 manage.py makemigrations sampleapp
Migrations for 'sampleapp':
  sampleapp/migrations/0001_initial.py
    - Create model ClubTeam

この時点ではマイグレーションのpythonコードを生成しただけなので、DBには変化なし。

MariaDB [mysite_db]> show tables;
+----------------------------+
| Tables_in_mysite_db        |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
10 rows in set (0.00 sec)

マイグレーション実行

アプリ全体を指定してmigrateする。ファイル単位での指定もできる模様。

$ python3 manage.py migrate sampleapp
Operations to perform:
  Apply all migrations: sampleapp
Running migrations:
  Applying sampleapp.0001_initial... OK

DBにテーブル定義が入りました:tada:

MariaDB [mysite_db]> show tables;
+----------------------------+
| Tables_in_mysite_db        |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| sampleapp_clubteam         |
+----------------------------+
11 rows in set (0.00 sec)

余談

modelにFKを指定(author = models.ForeignKey('auth.User'))しているので、そこがどうなっているかをmigrationで見てみる。
ついでに主キーも。

0001_initial.py
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=100)),
                ('created_date', models.DateTimeField(default=django.utils.timezone.now)),
                ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
  • PKはidという名前で自動生成されてました。(よい。)
  • FKはonDelete=CASCADEがデフォルトのようです。(好き。)
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5