今日任务
模型中使用外键的情况下,某个item的列表内容
开始环境搭建
mkdir drf_learn3
cd drf_learn3
virtualenv venv
source venv/bin/activate
pip list
pip install --upgrade pip
pip install django
pip install djangorestframework
pip install -U black
pip list
django-admin startproject myproject .
python manage.py startapp myapp
开始code
settings.py
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
"myapp",
]
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
# "django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
models.py
from django.db import models
# Create your models here.
class person(models.Model):
name = models.TextField(verbose_name="人")
class book(models.Model):
bookname = models.TextField(verbose_name="书名")
price = models.FloatField(verbose_name="价格")
author = models.ForeignKey("person", on_delete=models.CASCADE)
serializers.py
from rest_framework import serializers
from myapp.models import person, book
class bookSerializers(serializers.ModelSerializer):
class Meta:
model = book
fields = "__all__"
class personSerializers(serializers.ModelSerializer):
books = bookSerializers(many=True, source="book_set")
class Meta:
model = person
fields = "__all__"
views.py
import imp
from django.shortcuts import render
from rest_framework import viewsets
from myapp.models import book, person
from myapp.serializers import personSerializers, bookSerializers
# Create your views here.
class personViewSets(viewsets.ModelViewSet):
queryset = person.objects.all()
serializer_class = personSerializers
class bookViewSets(viewsets.ModelViewSet):
queryset = book.objects.all()
serializer_class = bookSerializers
urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from myapp.views import bookViewSets, personViewSets
router = DefaultRouter()
router.register(r"persons", personViewSets, basename="persons")
router.register(r"books", bookViewSets, basename="books")
urlpatterns = [
path("admin/", admin.site.urls),
path("", include(router.urls)),
]
创建数据库,并运行服务
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
使用postman测试
填充数据
获取数据
关键数据
{
"count": 11,
"next": "http://127.0.0.1:8000/persons/?page=2",
"previous": null,
"results": [
{
"id": 1,
"books": [
{
"id": 1,
"bookname": "唱",
"price": 0.1,
"author": 1
},
{
"id": 2,
"bookname": "跳",
"price": 0.2,
"author": 1
},
{
"id": 3,
"bookname": "rap",
"price": 0.3,
"author": 1
},
{
"id": 4,
"bookname": "篮球",
"price": 0.4,
"author": 1
}
],
"name": "菜旭坤"
},
{
"id": 2,
"books": [
{
"id": 5,
"bookname": "到此一放",
"price": 0.5,
"author": 2
}
],
"name": "王一波"
},
{
"id": 3,
"books": [],
"name": "一羊千喜"
},
{
"id": 4,
"books": [],
"name": "一羊千喜2"
},
{
"id": 5,
"books": [],
"name": "一羊千喜3"
},
{
"id": 6,
"books": [],
"name": "一羊千喜4"
},
{
"id": 7,
"books": [],
"name": "一羊千喜5"
},
{
"id": 8,
"books": [],
"name": "一羊千喜6"
},
{
"id": 9,
"books": [],
"name": "一羊千喜7"
},
{
"id": 10,
"books": [],
"name": "一羊千喜8"
}
]
}