Django rest framework にmodelを作る方法


#1. models.pyにclassを作る
```models.py
from django.db import models
class Character(models.Model):
    character = models.CharField(max_length=60)
    age = models.CharField(max_length=60)
    def __str__(self):
        return self.character
```
#2.terminal上でcommandを実行する
```

(env) qiita  mysite % python manage.py makemigrations
Did you rename character.first to character.age (a CharField)? [y/N] y
Did you rename character.last to character.character (a CharField)? [y/N] y
Migrations for 'myapi':
  myapi/migrations/0003_auto_*********.py
    - Rename field first on character to age
    - Rename field last on character to character
(env) qiita mysite % python manage.py migrate       
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, myapi, sessions
Running migrations:
  Applying myapi.0003_auto_********... OK
```
この前に他のfieldを削除していたので、このような内容になっているがpython manage.py makemigrations,python manage.py migrateを実行しokが出れば問題ない。

#3.admin.pyにcharacterの設定
```admin.py
from django.contrib import admin
from .models import Character

admin.site.register(Character)
```
このcodeを追加したら、python manage.py runserverを行う。
1.2.3の工程を行うことによって,Django rest frameworkにcharacterが追加される。
![スクリーンショット 2021-02-27 15.21.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1122184/e912a773-0f64-6986-674b-edbc60972734.png)

#4.serializers.pyの作成
```serializers.py
class CharacterSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Character
        fields = ('id', 'character', 'age')
```
serializers.pyというfileを新しく用意する。ここでは、fieldsの中にCharacterが持つことができる要素を追加することが出来る。今回はid,character,ageを設定した。なぜserializers.pyを作るのかというと、Django rest frameworkにデータを伝える際にjsonに変換しなければならないからである。
*今回の記事ではjsonには触れないことにする

#5.views.py&urls.pyの設定
```views.py 
from rest_framework import viewsets

from .serializers import CharacterSerializer
from .models import Character

class CharacterViewSet(viewsets.ModelViewSet):
    queryset = Character.objects.all().order_by('character')
    serializer_class = CharacterSerializer
```
```urls.py/mysite
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapi.urls')),
]
```
```urls.py/myapi
from django.urls import include, path
from rest_framework import routers
from . import views

router = routers.DefaultRouter()
router.register(r'characters', views.CharacterViewSet)


# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
```
views.py urls.pydでの設定を行うことによって画面にデータを表示させることが出来る。
*url.pyは２つあるので注意
*rest_frameworkの設定をしていないなら、あらかじめしておくことをおすすめする

python manage.py runserverを実行
![スクリーンショット 2021-02-27 15.40.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1122184/e61cf5c0-a43f-5892-5aa4-0e9807b0026e.png)
urlにcharactersのurlが設定できていることを確認出来る。

#7.実際にcharacterを追加してみる
![スクリーンショット 2021-02-27 15.43.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1122184/5bd3688e-2328-e984-94a8-1b899c76ef05.png)







![スクリーンショット 2021-02-27 15.43.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1122184/4c09429d-2824-5490-dab3-c2df0a7b6bed.png)
Character listの中にデータが追加されている。このように追加できればmodel作成は完了である。

#まとめ
今回はDjango rest framework へのmodelの追加を行った。model追加の注意点としては、urls.pyが２つあるため混合しないこと、commandの打ち忘れであると思う。またrest_frameworkを設定しなければ動かないので、その点も十分確認が必要である。