1. Django Tutorial(Airbnb) - Abstract Model


🌈 Abstract Model


🔥 抽象モデルとは?


🔥 抽象モデル継承の取得


🔥 Django Countryライブラリ


1.抽象モデルとは?

  • 抽象モデルは、複数のモデルに共通のフィールドを作成する必要がある場合に、コードの繰返し性を最小限に抑え、共通に使用されるフィールドを個別のモデルクラスとして作成し、各モデルからこれらのフィールドを継承して使用するために使用されます.
  • はまた、抽象モデルが継承されて使用されるモデルにのみ存在し、抽象モデル自体が実際にデータベースに格納される必要がないため、仮想データベースも提供する.
  • 1) core/models.py

  • 抽象モデルクラスを「abstract=true」に設定し、コードにのみ存在する抽象モデルクラスを表し、データベースに存在しない仮想モデルとして使用します.
  • from django.db import models
    # Create your models here.
    class TimeStampedModel(models.Model): # 👈 다른 모델에서 사용되어질 Abstract Model입니다:)
        """Time Stamped Definition"""
        created = models.DateField(auto_now_add=True) # 👈 다른 모델에서 공통적으로 사용할 필드
        updated = models.DateField(auto_now=True) # 👈 다른 모델에서 공통적으로 사용할 필드
        class Meta: 
            abstract = True # 👈 Abstract Model로 사용하기 위해서는 abstract=True를 지정해줘야해요!

    2.抽象モデル継承の取得


    1) rooms/models.py

    from django.db import models
    from core import models as core_models
    # Create your models here.
    class Room(core_models.TimeStampedModel): # 👈 TimeStampedModel의 필드를 상속 받아 사용
        """Room Model Definifion"""
        pass

    3.Django Countryライブラリ


    1)Django国とは?

  • CharFieldの選択プロパティは、すべての国/地域を定数に設定し、国/地域のリストを提供します.しかし、あらゆる国の情報を提供するDjango countryを使うと便利!外部ライブラリなので、インストールが必要です.
  • Django Countryインストール
  • 🔎 pipenv install django-countries
  • 2) settings.py

  • Django Countryは外部インストールで使用するアプリケーション機能と同じなので設定します.pyにAppを登録!この場合、THIRD PARTY APPSに入れる.
  • # Application definition
    DJANGO_APPS = [
        "django.contrib.admin",
        "django.contrib.auth",
        "django.contrib.contenttypes",
        "django.contrib.sessions",
        "django.contrib.messages",
        "django.contrib.staticfiles",
    ]
    PROJECT_APPS = [
        "users.apps.UsersConfig",
        "rooms.apps.RoomsConfig",
        "reviews.apps.ReviewsConfig",
        "reservations.apps.ReservationsConfig",
        "lists.apps.ListsConfig",
        "core.apps.CoreConfig",
        "conversations.apps.ConversationsConfig",
    ]
    THIRD_PARTY_APPS = [
        "django_countries", # 👈 Django Country App 등록
    ]
    INSTALLED_APPS = DJANGO_APPS + PROJECT_APPS + THIRD_PARTY_APPS

    3) rooms/models.py

  • Django Countryを使用してインポートします.
  • 🔎 from django_countries.fields import CountryField
  • Django Countryのフィールドは次のように追加されます.list displayに国を追加すると、Admin Panelに表示される国/地域のリストが表示されます.
  • from django.db import models
    from django_countries.fields import CountryField # 👈 Django Country 가져오기
    from core import models as core_models
    # Create your models here.
    class Room(core_models.TimeStampedModel):
        """Room Model Definifion"""
        name = models.CharField(max_length=140)
        description = models.TextField()
        country = CountryField()  # 👈 끝.