1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DjangoでWebアプリを作ってみる。【vol. 04 モデルを作ってDjangoAdminで操作してみる。】

Last updated at Posted at 2019-06-23

こちらの記事の続きです。

イントロダクション

Django Girls Tutorialを参考に進めます。
後々、pythonでスクレイピングして、EDINETから有価証券報告書の役員情報を拾ってきてみたいので、対応したモデルを作りたいと思います。

  • 管理担当 / responsible_user
  • 役名 / position
  • 職名 / job
  • 氏名 / name
  • 生年月日 / birthday
  • 略歴 / biography
  • 任期 / term
  • 株式数 / stock
  • 作成日時 / create_date
  • 作成者 / create_user
  • 更新日時 / update_date
  • 更新者 / update_user

モデルの要素として上記で構成しようと思います。

新しいアプリケーションの作成

python manage.py startapp corporateofficer

上記、実行後に以下が作成されています。

corporateOfficer.JPG

追加したアプリをDjangoに認識させる必要があるので「settings.py」に記述を追加します。


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corporateofficer' # 追加した。
]

モデルの作成

corporateofficer/models.pyを開いて、以下を記載します。

from django.db import models
from django.utils import timezone

class CorporateOfficer(models.Model):
    # 管理担当
    responsible_user = models.ForeignKey('auth.User', on_delete=models.CASCADE) 
    # 役名
    position = models.CharField(max_length=200)
    # 職名
    job = models.CharField(max_length=200)
    # 氏名
    name = models.CharField(max_length=200)
    # 生年月日
    birthday = models.DateTimeField(
            blank=True, null=True)
    # 略歴
    biography = models.TextField()
    # 任期
    term = models.CharField(max_length=200)
    # 株式数
    stock = models.CharField(max_length=200)
    # 作成日時
    create_date = models.DateTimeField(
            default=timezone.now)
    # 作成者
    create_user = models.CharField(max_length=200)
    # 更新日時
    update_date = models.DateTimeField(
            default=timezone.now)
    # 更新者
    update_user = models.CharField(max_length=200)

    def create(self):
        self.create_date = timezone.now()
        self.update_date = timezone.now()
        self.save()

    def __str__(self):
        return self.name

makemigrationsを実行します。

python manage.py makemigrations corporateofficer
Migrations for 'corporateofficer':
  corporateofficer\migrations\0001_initial.py
    - Create model CorporateOfficer

続いて、migrateを実行します。

python manage.py migrate corporateofficer
Operations to perform:
  Apply all migrations: corporateofficer
Running migrations:
  Applying corporateofficer.0001_initial... OK

MakemigrationsとMigrateの違いは、こちらを確認させていただきました。

corporateofficer_corporateofficerでテーブルが作成されていました。
プロジェクト名_モデル名という関係なのですね。。。

これだとさすがにおかしいので、edinet_corporateofficerとなるように作り直しました。

DjangoAdminで操作してみる。

Django Girls Tutorialのログインページを作ろう(Django admin)に従って進めていきます。

admin.pyに以下を記載します。


from django.contrib import admin
from .models import CorporateOfficer

admin.site.register(CorporateOfficer)

ログインする前にスーパーユーザーを作っておきます。

python manage.py createsuperuser

パスワードは、あまりに短いと怒られます。

This password is too short. It must contain at least 8 characters.
This password is too common.

そのまま作ることも可能なようですが、ここではdjango20190623としておきました。

アプリケーションを実行します。

python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
June 23, 2019 - 12:27:00
Django version 2.2.2, using settings 'firstproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

http://127.0.0.1:8000/admin/
にアクセスするとログイン画面が表示されるので、先程指定したユーザ名とパスワードでログインします。
すると、モデルに対応したアプリケーションが作成されていることが確認できました。
CRUDの機能が一通り揃っている辺りは、Ruby on Railsと同じような感じですね。

登録したデータを確認すると、PKとしてId(サロゲートキー)が振られています。
ここらへんは、JavaのHibernateと同じような思想を感じます。

次は、機能を拡張させていこうと思います。

1
3
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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?