[DRF]入门-3

今日任务

模型中使用外键的情况下,某个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"
        }
    ]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢斯

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值