首页 > 技术文章 > 序列化器与正向查找和反向查找

kai0118 2020-10-12 21:58 原文

 

# 普通字段
name = models.CharField(max_lenth=20)

# 一对多字段,ForeignKey
name = models.ForeignKey(tablename, on_delete="", related_name=None)
{
   tablename: #关联表名
}
{
   on_delete = None,  # 当删除关联表中的数据时,当前表与其关联的行的行为
 - models.CASCADE,# 删除关联数据,与之关联也删除
 - models.DO_NOTHING,# 删除关联数据,引发错误IntegrityError
 - models.PROTECT,# 删除关联数据,引发错误ProtectedError
 - models.SET_NULL,# 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
 - models.SET_DEFAULT,# 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
 - models.SET,# 删除关联数据,
   a.与之关联的值设置为指定值,设置:models.SET()
   b.与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
}
{
   related_name: boj.表名_set.all() == obj.relater_name.all()
}

# 多对多字段,ManyToManyField()
name = models.ManyToManyField(tablename, )
# 正向查找:主表直接查询关联表内容
在serializers.CharField字段中,添加source参数, 格式为source = '外键.某字段'
   Course_name = serializers.CharField(source='course.title',required=False)
   
# 反向查找:关联表通过外键查询主表内容

class ChaptersSerializer(serializers.ModelSerializer):
   # 正向查找,找到课程表
   # Course_name = serializers.CharField(source='course.title',required=False)
   
   # 反向查找,找到节表对应的信息
   sections = SectionsSerializer(many=True)
   class Meta:
       fields = '__all__'
       model = models.Chapters
       
       
   class SectionsSerializer(serializers.ModelSerializer):
       class Meta:
           fields = '__all__'
           model = models.Sections







 

推荐阅读