[18 | ホームページ] << [ホーム] >> [20 | Permission]
カテゴリーを追加するため、「Desktop/QRMenu/qrmenu_server」の実装をします。
「qrmenu_server/qrmenucore/models.py」ファイルを編集します。
記述編集 【QRMenu/qrmenu_server/qrmenucore/models.py】
from django.db import models from django.contrib.auth.models import User # Create your models here. class Place(models.Model): owner = models.ForeignKey(User, on_delete=models.CASCADE) name = models.CharField(max_length=255) image = models.CharField(max_length=255) number_of_tables = models.IntegerField(default=1) def __str__(self): return "{}/{}".format(self.owner.username, self.name) class Category(models.Model): place = models.ForeignKey(Place, on_delete=models.CASCADE, related_name="categories") name = models.CharField(max_length=255) def __str__(self): return "{}/{}".format(self.place, self.name) class MenuItem(models.Model): place = models.ForeignKey(Place, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="menu_items") name = models.CharField(max_length=255) description = models.TextField(blank=True) price = models.IntegerField(default=0) image = models.CharField(max_length=255) is_available = models.BooleanField(default=True) def __str__(self): return "{}/{}".format(self.category, self.name)
マイグレーションファイルを作成します。
コマンド
python manage.py makemigrations
作成したマイグレーションファイルを適用します。
python manage.py migrate
「qrmenucore/serializers.py」ファイルを編集します。
記述編集 【QRMenu/qrmenu_server/qrmenucore/serializers.py】
from rest_framework import serializers from . import models class MenuItemSerializer(serializers.ModelSerializer): class Meta: model = models.MenuItem fields = ( 'id', 'name', 'description', 'price', 'image', 'is_available', 'place', 'category') class CategorySerializer(serializers.ModelSerializer): menu_items = MenuItemSerializer(many=True, read_only=True) class Meta: model = models.Category fields = ( 'id', 'name', 'menu_items', 'place') class PlaceDetailSerializer(serializers.ModelSerializer): categories = CategorySerializer(many=True, read_only=True) class Meta: model = models.Place fields = ( 'id', 'name', 'image', 'number_of_tables', 'categories') class PlaceSerializer(serializers.ModelSerializer): class Meta: model = models.Place fields = ('id', 'name', 'image')
「qrmenucore/views.py」ファイルを編集します。
記述編集 【QRMenu/qrmenu_server/qrmenucore/views.py】
from rest_framework import generics from . import models, serializers # Create your views here. class PlaceList(generics.ListCreateAPIView): serializer_class = serializers.PlaceSerializer def get_queryset(self): return models.Place.objects.filter(owner_id=self.request.user.id) def perform_create(self, serializer): serializer.save(owner=self.request.user) class PlaceDetail(generics.RetrieveUpdateDestroyAPIView): serializer_class = serializers.PlaceDetailSerializer queryset = models.Place.objects.all() class CategoryList(generics.CreateAPIView): serializer_class = serializers.CategorySerializer class CategoryDetail(generics.UpdateAPIView, generics.DestroyAPIView): serializer_class = serializers.CategorySerializer queryset = models.Category.objects.all() class MenuItemList(generics.CreateAPIView): serializer_class = serializers.MenuItemSerializer class MenuItemDetail(generics.UpdateAPIView, generics.DestroyAPIView): serializer_class = serializers.MenuItemSerializer queryset = models.MenuItem.objects.all()
パスの設定をします。
「qrmenu_server/urls.py」ファイルを以下のように編集します。
記述編集 【QRMenu/qrmenu_server/qrmenu_server/urls.py】
from django.contrib import admin from django.urls import path, include from qrmenucore import views urlpatterns = [ path('admin/', admin.site.urls), path('auth/', include('djoser.urls')), path('auth/', include('djoser.urls.authtoken')), path('api/places/', views.PlaceList.as_view()), path('api/places/<pk>', views.PlaceDetail.as_view()), path('api/categories/', views.CategoryList.as_view()), path('api/categories/<pk>', views.CategoryDetail.as_view()), path('api/menu_items/', views.MenuItemList.as_view()), path('api/menu_items/<pk>', views.MenuItemDetail.as_view()), ]
管理画面の編集をします。
「qrmenucore/admin.py」ファイルを以下のように編集します。
記述編集 【/QRMenu/qrmenu_server/qrmenucore/admin.py】
from django.contrib import admin from . import models # Register your models here. admin.site.register(models.Place) admin.site.register(models.Category) admin.site.register(models.MenuItem)
ブラウザで管理画面を確認します。
http://127.0.0.1:8000/admin/
↓↓クリックして頂けると励みになります。
[18 | ホームページ] << [ホーム] >> [20 | Permission]