source 用法

  1 models.py
  2 
  3 from django.db import models
  4 
  5 '''
  6 书跟出版社 一对多
  7 书跟作者  多对多
  8 
  9 '''
 10 
 11 
 12 class Book(models.Model):
 13     title = models.CharField(max_length=32)
 14     price = models.IntegerField()
 15     pub_date = models.DateTimeField()
 16     publish = models.ForeignKey('Publish', on_delete=models.CASCADE, null=True)
 17     author = models.ManyToManyField('Author')
 18   
 19   # __str__ 可以把想要返回的字段名显示在前端 如果没有__str__ 外键只会显示什么对象
 20     def __str__(self):
 21         return self.title
 22 
 23     def text(self):
 24         return 'wo xi huan lzw'
 25 
 26 
 27 class Publish(models.Model):
 28     name = models.CharField(max_length=32)
 29     email = models.EmailField()
 30 
 31     def __str__(self):
 32         return self.name
 33 
 34 
 35 class Author(models.Model):
 36     name = models.CharField(max_length=32)
 37     age = models.IntegerField()
 38 
 39     def __str__(self):
 40         return self.name
 41 url.py 
 42 
 43 from django.urls import path, re_path, include
 44 
 45 from app02 import views
 46 
 47 urlpatterns = [
 48 
 49     re_path(r'books/(?P<pk>\d+)', views.Book2View.as_view()),
 50 
 51 ]
 52 
 53 view.py
 54 '''
 55 四:
 56 source三种用法
 57 
 58 D:\python\pychar\djangoProject\django528\venv\Lib\site-packages\django\views\debug.py  333
 59 
 60 '''
 61 
 62 from django.shortcuts import render
 63 
 64 from rest_framework.views import APIView
 65 from rest_framework.response import Response
 66 
 67 from . import models
 68 from . import serializer
 69 
 70 dic = {
 71     'code': '100',
 72     'msg': '',
 73 }
 74 
 75 
 76 class Book2View(APIView):
 77     # 单查
 78     def get(self, request, pk):
 79         book = models.Book.objects.filter(id=pk).first()
 80         book_ser = serializer.Book2Serializer(instance=book)
 81         dic['code'] = '100'
 82         dic['msg'] = '成功'
 83         dic['data'] = book_ser.data
 84         return Response(data=dic)
 85 serializer.py
 86 
 87 from rest_framework import serializers
 88 from rest_framework.exceptions import ValidationError
 89 
 90 from . import models
 91 
 92 
 93 class Book2Serializer(serializers.Serializer):
 94     # title = serializers.CharField()
 95     # 1. 修改字段
 96     name = serializers.CharField(source='title')
 97     price = serializers.CharField()
 98 
 99     # pub_date = serializers.CharField()
100     # 1. 支持方法
101     pub_date = serializers.CharField(source='text')
102 
103     # Publish = serializers.CharField()
104 
105     # 2. 跨表 source='publish.email' --book.publish.email 不写source -- book.字段名字
106     publish = serializers.CharField(source='publish.email')
107 
108     # author = serializers.CharField()
109 
110     authors = serializers.SerializerMethodField()
111   # 3. 与 serializers.SerializerMethodField() 配套使用 return 什么 前端就显示什么
112   # get_字段
113     def get_authors(self, instance):
114         # instance--book对象
115         authors = instance.author.all()
116         li = []
117         for author in authors:
118             li.append({'name': author.name, 'age': author.age})
119         return li
120   

 

posted @ 2021-05-20 00:49  mofr  阅读(267)  评论(0)    收藏  举报