0
0

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 3 years have passed since last update.

Django rest framework にmodelを作る方法

Posted at

#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

#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は2つあるので注意
*rest_frameworkの設定をしていないなら、あらかじめしておくことをおすすめする

python manage.py runserverを実行
スクリーンショット 2021-02-27 15.40.15.png
urlにcharactersのurlが設定できていることを確認出来る。

#7.実際にcharacterを追加してみる
スクリーンショット 2021-02-27 15.43.06.png

スクリーンショット 2021-02-27 15.43.21.png
Character listの中にデータが追加されている。このように追加できればmodel作成は完了である。

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

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?