Django restframework使用3
model
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.IntegerField()
pub_date = models.DateField(null=True)
publish = models.ForeignKey('Publisher', on_delete=models.CASCADE)
author = models.ManyToManyField('Author')
def __str__(self):
return self.title
class Meta:
db_table = 'book'
verbose_name = '图书'
verbose_name_plural = verbose_name
class Publisher(models.Model):
name = models.CharField(max_length=32)
email = models.EmailField()
def __str__(self):
return self.name
class Meta:
db_table = 'publisher'
verbose_name = '出版社'
verbose_name_plural = verbose_name
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
def __str__(self):
return self.name
class Meta:
db_table = 'author'
verbose_name = '作者'
verbose_name_plural = verbose_name
serializer
from app2.models import Author,Publisher,Book
from rest_framework import serializers
class PublisherSerializers(serializers.ModelSerializer):
class Meta:
model = Publisher
fields = '__all__'
class AuthorSerializers(serializers.ModelSerializer):
class Meta:
model = Author
fields = '__all__'
class BookSerializers(serializers.Serializer):
title = serializers.CharField(max_length=32)
price = serializers.IntegerField()
pub_date = serializers.DateField()
publisher = serializers.CharField(source='publish.name')
authors = serializers.SerializerMethodField()
def get_authors(self, obj):
res = []
for author in obj.author.all():
res.append({
'author_name':author.name,
'author_age':author.age
})
return res
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e5724e7c3a75d847e5657e216eba7098.png)
view
from app2.models import Book,Publisher,Author
from app2.serializers import PublisherSerializers,AuthorSerializers,BookSerializers
from rest_framework.views import APIView
from rest_framework import generics
from rest_framework.response import Response
class PublisherView(APIView):
def get(self, request):
publisher_list = Publisher.objects.all()
publisher_list_serializers = PublisherSerializers(publisher_list, many=True)
return Response(publisher_list_serializers.data)
class PublisherDetailView(APIView):
def get(self, request, pk):
publisher = Publisher.objects.get(pk=pk)
publisher_serializer = PublisherSerializers(publisher)
return Response(publisher_serializer.data)
class AuthorView(generics.ListAPIView):
queryset = Author.objects.all()
serializer_class = AuthorSerializers
class AuthorDetailView(generics.RetrieveAPIView):
queryset = Author.objects.all()
serializer_class = AuthorSerializers
class BookView(generics.ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializers
urls
from django.urls import path
from app2 import views
app_name = 'app2'
urlpatterns = [
path('app2/publishers/', views.PublisherView.as_view()),
path('app2/publishers/<int:pk>/', views.PublisherDetailView.as_view()),
path('app2/authors/', views.AuthorView.as_view()),
path('app2/authors/<int:pk>/', views.AuthorDetailView.as_view()),
path('app2/books/', views.BookView.as_view()),
]