【Cookiecutter-Djangoで作るWebアプリ】app作成

Django

前回の続きです。

レストラン情報を格納するモデルを作成します。通常のDjangoであれば

django-admin startapp restaurants

で良いのですが、これだとrestaurantsがプロジェクトのルートディレクトリに作成されてしまします。

アプリのルートディレクトリである/rice_hacker/rice_hackerにrestaurantsフォルダ作成し、以下のコマンド実行します。

django-admin startapp restaurants ./rice_hacker/restaurants

これで作成したrestaurantsフォルダの中にmodels.pyなどのファイルが作成されます。

次にrestaurantsアプリをsettingsに追加します。

Cookiecutter-Djangoでは、settingsのファイルは複数に分かれており、rice_hacker/config/settingsに格納されています。

base.pyのLOCAL_APPSにrestaurantsを追加します。

LOCAL_APPS = [
'rice_hacker.users.apps.UsersConfig',
# Your stuff: custom apps go here
'rice_hacker.restaurants.apps.RestaurantsConfig',
]

restaurantsアプリを作成したので、models.pyを作っていきます。

from django.db import models

class Country(models.Model):
name = models.CharField(max_length=30,)

def __str__(self):
return self.name

class State(models.Model):
name = models.CharField(max_length=30,)
country = models.ForeignKey('Country', on_delete=models.CASCADE,)

def __str__(self):
return self.name + ", " + self.country.name

class Town(models.Model):
name = models.CharField(max_length=30,)
state = models.ForeignKey('State', on_delete=models.CASCADE,)

def __str__(self):
return self.name + ", " + self.state.name

class Restaurant(models.Model):

name = models.CharField(max_length=100,)

desc = models.CharField(max_length=300,blank=True,)

web = models.CharField(max_length=100,blank =True,)

phone = models.CharField(max_length=20,blank =True,)

town = models.ForeignKey('Town', on_delete=models.CASCADE,)

address = models.CharField(max_length=200,)

picture = models.ImageField(upload_to = 'restaurants',blank = True,)

def __str__(self):
return self.name

class Food(models.Model):
name = models.CharField(max_length=30,)
picture = models.ImageField(upload_to='foods', blank=True,)
restaurant = models.ForeignKey('Restaurant', on_delete=models.CASCADE,)

def __str__(self):
return self.name

 

ちなみにImageFieldのupload_to=”はアプリのルートディレクトリ下の’media’というフォルダ内を基底とします。mediaフォルダは自動で作成されないので、作っておきましょう。

その中にrestaurants,foodsフォルダを作成します。

マイグレーションを行い、databaseに登録します。

python manage.py makemigrations
python manage.py migrate

 

タイトルとURLをコピーしました