django多对⼀和多对多的序列化(以下⽅式只⽤于序列化,反序列化报错)
from django.db import models
# Create your models here.
class Book(models.Model):
title=models.CharField(max_length=32)
price=models.IntegerField()
pub_date=models.DateField()
publish=models.ForeignKey("Publish")
世风日下什么意思
authors=models.ManyToManyField("Author")
def__str__(lf):
return"app02 %s" % lf.title
class Meta:
app_label='app02'
class Publish(models.Model):
name=models.CharField(max_length=32)
email=models.EmailField()
def__str__(lf):
return"app02 %s" % lf.name
class Meta:
app_label = 'app02'
class Author(models.Model):
name=models.CharField(max_length=32)
age=models.IntegerField()
def__str__(lf):
return"app02 %s" %lf.name
class Meta:
app_label = 'app02'
2.多对⼀和多对多的序列的⽅式(⽅式⼀)
class AuthorSerializers(rializers.Serializer):
name=rializers.CharField()
age=rializers.IntegerField()
class Publishr(rializers.Serializer):
生命本来没有名字
name=rializers.CharField(max_length=32)
email=rializers.EmailField()
class BookSerializers(rializers.Serializer):
id=rializers.IntegerField()
诸葛恪得驴
title=rializers.CharField()
price=rializers.IntegerField()
pub_date=rializers.DateField()
合伙人合作协议书# 多对⼀
# source = "ail"
# 可以指定model中的函数,也可以指定字段
# 这种⽅式不使⽤于多对多,适⽤于⼀对⼀和多对⼀,⽽且这种⽅式只序列化⼀个值
# publish=rializers.CharField(source="publish.name",read_only=Fal)
环境会计信息披露# 多对⼀序列化多个值的写法
publish = Publishr()
# 多对多
authors=rializers.SerializerMethodField()
# 钩⼦函数序列化,必须是以get_开头的
def get_authors(lf,obj):
author=obj.authors.all()
auth=AuthorSerializers(author,many=True)
return auth.data
3.多对⼀和多对多的序列的⽅式(⽅式⼆)
class AuthorSer(rializers.ModelSerializer):
class Meta:
model=models.Author
企业文化的定义fields='__all__'
class Publishr(rializers.ModelSerializer):
class Meta:
model=models.Publish
未来的能源
fields='__all__'
class BookModelSerializers(rializers.ModelSerializer): #多对⼀
publish = Publishr()
# 多对多
authors = rializers.SerializerMethodField()
# 钩⼦函数序列化,必须是以get_开头的
def get_authors(lf, obj):
author = obj.authors.all()
auth = AuthorSerializers(author, many=True) return auth.data
书法比赛活动方案class Meta:
model=models.Book
fields='__all__'