django正反向以及无关联数据表序列化的问题

Django model反向关联名称的方法 如果你在 ForeignKey或 ManyToManyField字段上使用 related_name属性,你必须总是为该字段指定一个唯一的反向名称。但在抽象基类上这样做就会引发一个很严重的问题。因为 Django 会将基类字段添加到每个子类当中,而每个子类的字段属性值都完全相同 (这里面就包括related_name)。 当你在(且仅在)抽象基类中使用 related_name 时,如果想绕过这个问题,名称中就要包含’%(app_label)s’和 ‘%(class)s’。 ‘%(class)s’会替换为子类的小写加下划线格式的名称,字段在子类中使用。 ‘%(app_label)s’会替换为应 立即下载
最近写到rest_framework返回数据,需求有正向的数据关联反向的数据关联,以及没有关系的两个表之间的数据关联起来一起返回出去
  • 我的数据模型
# 用户表
class User(models.Model):
    username = models.CharField(max_length=50, default='可爱', editable=False, verbose_name='昵称')
    status = models.BooleanField(default=0, choices=((0, '未关注'), (1, '已关注')), verbose_name='是否关注')
    level_id = models.ForeignKey(to='Level', blank=True, null=True, default=None, on_delete=models.SET_NULL, verbose_name='用户等级')
    addtime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')

# 用户级别表
class Level(models.Model):
    name = models.CharField(max_length=50,  editable=False, verbose_name='级别')
  • 正向关联的使用 (序列化器使用的serializers.ModelSerializer)
class UserSerializer(serializers.ModelSerializer):
    """用户数据序列化"""
    # 时间格式
    addtime = serializers.DateTimeField(read_only=True, format="%Y-%m-%d %H:%M:%S")
    # 获取数据库中 choices 设置的数据值
    status = serializers.CharField(source='get_status_display')
    # 通过 User 表中的 level_id 字段关联到另外的表中的 name 字段,这个是正向关联
    level_id_icon = serializers.CharField(source='level_id.name')
    class Meta:
        # 选择数据库表
        model = User
        # '__all__' 全部 如果只返回部分数据 使用元组或者列表把字段放进去  ['id', 'user', ...]
        fields = '__all__'
        

  • 反向关联的使用 (序列化器使用的serializers.ModelSerializer)
class LevelSerializer(serializers.ModelSerializer):
    """用户数据序列化"""
    # 定义一个 levels 加入user的序列化器 然后记得 User表中的外键加上 related_name = 定义的序列化器昵称
    """
    level_id = models.ForeignKey(to='Level', related_name='levels', blank=True, null=True, default=None, on_delete=models.SET_NULL, verbose_name='用户等级')
    """
    levels = UserSerializer(many=True, read_only=True)
    class Meta:
        # 选择数据库表
        model = Level
        # '__all__' 全部 如果只返回部分数据 使用元组或者列表把字段放进去  ['id', 'user', ...]
        fields = '__all__'
        
  • 无关联表的序列化器使用 (序列化器使用的serializers.ModelSerializer)
这个时候我们需要依赖强大的第三方包 django-rest-mutiple-models 

# 第一步先安装(大神请跳过)
pip install django-rest-multiple-models

# 第二部setting配置中配置一下APP

INSTALLED_APPS = (
    ....
    'drf_multiple_model',
)

# 第三步 导入
from drf_multiple_model.views import ObjectMultipleModelAPIView

# 如下两个模型
class Play(models.Model):
    genre = models.CharField(max_length=100)
    title = models.CharField(max_length=200)
    pages = models.IntegerField()
 
class Poem(models.Model):
    title = models.CharField(max_length=200)
    style = models.CharField(max_length=100)
    lines = models.IntegerField()
    stanzas = models.IntegerField()

# 序列化如下
class PlaySerializer(serializers.ModelSerializer):
    class Meta:
        model = Play
        fields = ('genre','title','pages')
 
class PoemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Poem
        fields = ('title','stanzas')
       
# 翻页器
class LimitPagination(MultipleModelLimitOffsetPagination):
    # 每页的数量
    default_limit = 10

# 如果我们使用的url是router,那这里我们就应该继承ObjectMutipleModelAPIViewset
from drf_multiple_model.viewsets import ObjectMultipleModelAPIViewSet

# 代码
class TextAPIView(ObjectMultipleModelAPIView):
    pagination_class = LimitPagination
    querylist = [
        {'queryset': Play.objects.all(), 'serializer_class': PlaySerializer},
        {'queryset': Poem.objects.filter(style='Sonnet'), 'serializer_class': PoemSerializer},
        ....

  • ObjectMultipleModelAPIView 的拓展
# 现在有一个需求,就是通过get传过来的参数进行过滤,这个时候就需要用到参数了
class TextAPIView(ObjectMultipleModelAPIView):
    pagination_class = LimitPagination
    def get(self, request, *args, **kwargs):
        	# 获取收到的数据
            uid = request.GET.get('uid', '')  # 学生id
            cid = request.GET.get('cid', '')  # 班级id
            sid = request.GET.get('sid', '')  # 学校id


            self.querylist = [
                # 在进行过滤
                {'queryset': Student.objects.filter(id=uid).order_by('-id'),
                    'serializer_class':  StudentSerializers, 'label': 'student', },
                {'queryset': Student.objects.filter(id=uid).order_by('-id'),
                    'serializer_class':  StudentSerializers, 'label': 'student', },
            ]

            return self.list(request, *args, **kwargs)
  • 有人问了,那么没有关联的表字段,要怎么加到一个序列化器中,以下是序列化器不使用外键进行序列化嵌套

class PoemSerializer(serializers.ModelSerializer):
	# 这是一个标准的序列化器 现在我们给他加上另外一个表中的数据,没有外键关联
	book_id = serializers.SerializerMethodField()

    class Meta:
        model = Poem
        fields = ('title', 'stanzas', 'book_id')
        
   	def get_book_id(self, obj):
   		# obj是个数据模型对象,可以直接. 拿到数据 
        user = book.objects.filter(id=obj.id).first() # 物理关联,不关联也行 随便
  		if user:
            data = user.name
        else:
            data = None
        return data
  • 这个方法是通过自定义一个键,通过get去拿到每个传进来的数据对象,使用SerializerMethodField进序列化关联, 参考 超链接 还有一种定义模型的方法 参考 超链接
SNAP实战:Sentinel-1 GRD数据从预处理到后向散射系数生成全流程解析 本文详细解析了Sentinel-1 GRD数据从预处理到后向散射系数生成的全流程,包括辐射定标、噪声处理、地形校正等关键步骤。通过SNAP软件实战操作,帮助用户掌握SAR影像处理技巧,提升数据质量与分析效率,适用于地表变化监测、灾害评估等应用场景。 阅读详情

相关推荐

采购订单定价策略 超详细

‘需求’字段里填写的是一个例程编号(例程是一段判断程序),如果我们在需求中维护了例程编号,那只有这个例程条件被满足时,这个条件表才会被系统自动读取。一部分的条件表只有在凭证项目满足一定的条件时才会被读取。 ‘排斥的’字段如果别勾中的话,那表明如果这个条件表被系统成功读取到数据后,系统将停止这个存取顺序的执行,否则,系统将继续执行下去。 注意:a、如果我们给某个条件类型设定了有效期的话,那我们必须给这个条件类型分配一个存取顺序。 b、不能给一个抬头条件分配存取顺序。 是...

竹大的博客 1万+

Django框架之DRF序列化与反序列化

概念: 序列化:将Python对象转换为json字符串,反之json字符串反序列化为对象 使用drf序列化组件的步骤如下: 1.在你的app中新建一个py文件,新建一个序列化的类 2.在类中写要序列化的字段 在视图中使用序列化的类 1.实例化出一个序列化的对象,在产生对象的时候,传入序列化的对象(queryset对象) 2.对象.data 3.return Reponse(对象.data) 使用实...

python基础 3625

STC8H DMA 串口1全双工中断方式收发通讯C语言

串口1全双工中断方式收发通讯程序。 通过PC向MCU发送数据, MCU将收到的数据自动存入DMA空间. 当DMA空间存满设置大小的内容后,通过串口1的DMA自动发送功能把存储空间的数据原样返回. 用定时器做波特率发生器,建议使用1T模式(除非低波特率用12T),并选择可被波特率整除的时钟频率,以提高精度。

czhaii的专栏 1467

Django 外键序列化器 和 前后端案例

准备工作 1. 创建django项目和应用 创建项目:django-admin startproject 项目名 创建子应用: python manage.py startapp 子应用名 2.项目配置 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.co

ZXY_lucky的博客 1544

在 Ansys CFX Pre 中配置 RGP 表的分步指南

掌握在 Ansys CFX Pre 中设置 RGP 表的技巧,以优化仿真精度和效率。

jkh920184196的博客 1671

信噪比(Signal-to-Noise Ratio, SNR)详细介绍

信噪比(Signal-to-Noise Ratio,SNR)是衡量信号质量的重要参数,表示有用信号的功率与背景噪声功率的比值。其中,\( P_{\text{signal}} \) 表示信号功率,\( P_{\text{noise}} \) 表示噪声功率。- 音频处理:在音频设备和录音系统中,SNR决定了音质的好坏,高SNR表示音频信号更清晰,噪声更少。- 低SNR:信号中噪声成分较大,接收端难以分辨有用信号和噪声,可能导致误码率高,通信质量差。SNR定义为信号功率与噪声功率之比,通常用分贝(dB)表示。

qq_58860480的博客 8万+

Django序列化器一对多及多对一

三张表:病例,病例富文本, 病例图片 病例一对多到病例富文本, 病例富文本一对多到病例图片 class Case(models.Model): """ 病例 """ title = models.CharField(max_length=250) description = models.TextField() image_examine = models.TextField() # 影像学检查 # type 字段更改成外键,动态化分类 ca

我就叫贝塔 969

华为硬件逻辑岗笔试题(一)

积少成多,集腋成裘,坚持!!! 目录 1. 进制转换 2. 状态机和编码方式 3. 存储器的分类 4. Verilog语法中的操作符 5. 对组合逻辑的认识 6. 对时序逻辑的认识 7. 竞争冒险的认识 8. 基本时序逻辑电路 9. 建立时间和保持时间 10. 同步时序电路 11. 组合逻辑和时序逻辑判断 13. 基本总线的理解 14.加法器 15.FPGA开发工具 1. 进制转换 1、十进制46.25对应的二进制表达式为( )。 A 101110.11...

qq_42235129的博客 1万+

Django的序列化和反序列化

在开发REST API接口时,视图中做的最主要有三件事: 将请求的数据(如JSON格式)转换为模型类对象 操作数据库 将模型类对象转换为响应的数据(如JSON格式) 序列化可以理解为: 将程序中的一个数据结构类型转换为其他格式(字典、JSON、XML等),例如将Django中的模型类对象装换为JSON字符串,这个转换过程我们称为序列化。 反之,将其他格式(字典、JSON、XML等)转换为程序中的数据,例如将JSON字符串转换为Django中的模型类对象,这个过程我们称为反序列化。 总结 在开发REST

weixin_45827423的博客 3652

《YOLOv8:从入门到实战》报错解决 & 专栏答疑

《YOLOv8:从入门到实战》专栏上线后,部分同学在学习过程中提出了一些问题,笔者相信这些问题其他同学也有可能遇到。为了让大家可以更好地学习本专栏内容,笔者特意推出了该篇专栏答疑,针对同学们在学习过程中所提出的问题进行汇总记录,并不断实时更新,希望能够帮助到大家!🌈

小哥谈 1241

Claude Code 实战 从零教你用 Claude Code 干活

Claude Code 实用指南:AI 编程助手的核心功能与使用技巧 Claude Code 是 Anthropic 推出的智能编程助手,可直接在本地环境中执行操作,相比传统 AI 对话工具具有显著优势:能直接读取项目文件、自动执行修改、记忆项目规则,并支持连接外部服务。本文详解其安装配置、三大核心场景(资料搜索、网页抓取、文章撰写)及进阶功能(Skills、MCP协议、斜杠命令)。特别提供了工作模式切换、CLAUDE.md配置文件等实用技巧,并附常见问题解决方案,帮助用户高效利用这一"坐在身边的

2401_84052244的博客 7567

Django的序列化与反序列化验证

一、Json序列化 Django在请求完后,需要将返回的对象序列化成json串后,最后返回的时候才能以JsonRepsonse的形式返回出来,否则会报错,前端页面也需要根据返回的json串来做响应处理。 对象Json序列化 1. 继承serializers包下的ModelSeriralizer: from rest_framework import serializers class UserSerialize(serializers.ModelSeri...

Dream_it_possible!的博客 1712

多智能体记忆架构设计:从分层模型到一致性实践

多智能体记忆架构本质上是一个有状态、分布式、支持遗忘的知识系统。从分层模型入手,结合RBAC隔离、版本向量一致性以及混合存储,可以构建出既灵活又健壮的生产级方案。可微分记忆:让记忆的读写操作嵌入端到端训练。基于大模型的记忆压缩:用LLM自动生成情景摘要,取代规则式遗忘。联邦记忆:不同组织之间的多智能体系统在不共享原始数据的情况下协同记忆。希望本文能为你的多智能体项目提供一块坚实的基石。欢迎在评论区分享你在实践中遇到的记忆架构难题。

Ven%的博客 171

drf序列化时嵌套显示外键关联字段

话不多说,先看代码: models.py from django.db import models class Product(models.Model): name = models.CharField() class ProductCategory(models.Model): category = models.ForeignKey(Product) 正向嵌套显示外键字段: serializers.py from rest_framework import serializer

学习笔记,不喜勿喷! 3090

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

从零开始DRF框架源码剖析—序列化与反序列

序列化组件的使用 先介绍一下序列化组件的使用,之后再详细介绍源码。序列化组件有三个 Serializer(偏底层)、ModelSerializer(重点)、ListModelSerializer(辅助群改) 我们先讲Serializer,首先在models.py创建类,然后进行数据迁移。 class User(models.Model): SEX_CHOICES = [ ...

Zijian Su的博客 747

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Django REST framework简单示例

简单来说,使用Django REST framework需要涉及4个关键类 > model:模型,定义数据表 > sariaizers:序列化,相当于form > viewsets:视图 > router:路由器,注册url地址

weixin_44153121的博客 505

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Django项目--用户地址管理

Address模型类中的外键指向Areas/models里面的Area,指明外键ForeignKey时,可以使用字符串应用名.模型类名来定义related_name 在进行反向关联查询时使用的属性,如表示可以通过Area对象.city_addresses属性获取所有相关的city数据。ordering 表名在进行Address查询时,默认使用的排序方式。

2301_78505185的博客 512

Django Web开发全流程实战:从MVT架构到生产部署

Web开发框架是构建现代网络应用的核心工具,它通过封装通用功能与提供约定规范,帮助开发者高效实现业务逻辑。其原理在于遵循特定的架构模式(如MVC/MVT),分离数据、逻辑与表现层,从而提升代码的可维护性与团队协作效率。在Python生态中,Django以其“大而全”的“电池内置”哲学脱颖而出,它内置了ORM、Admin后台、认证系统等强大组件,极大地加速了从原型到产品的开发流程。这种开箱即用的特性,使其在快速构建内容管理系统、电商平台及企业级应用等场景中具有显著优势。本文以构建一个文章发布系统为例,详细拆解

weixin_30239339的博客 354

Django Web开发全流程实战:从MTV架构到生产部署

Web开发框架是构建现代网络应用的核心工具,它通过封装通用功能、提供标准化架构,帮助开发者高效实现业务逻辑。Django作为Python领域最成熟的Web框架,其MTV(Model-Template-View)架构模式清晰分离了数据、业务与展示层,遵循“不重复自己”的设计哲学,显著提升了代码可维护性与团队协作效率。在技术价值层面,Django的ORM系统实现了数据模型与数据库的无缝映射,内置Admin后台极大简化了数据管理界面的开发,而其“开箱即用”的特性覆盖了用户认证、表单处理、安全防护等Web开发常见需

weixin_34242331的博客 497

Django 快速入门:安装、项目创建与自动化测试实战

Python Web 开发中,Web 框架的选择直接影响开发效率。Django 作为 Python 生态最成熟的全栈式框架,以“自带电池”理念集成 ORM、Admin 后台、认证与测试框架,为数据驱动型应用提供完整解决方案。掌握 Django 安装与环境配置是入门的第一步,通过虚拟环境隔离依赖,可避免项目间的包冲突。随后基于项目脚手架,开发者能快速构建 JSON 接口并利用 Django 内置测试框架完成自动化测试,确保代码质量。从本地开发到生产部署,Django 均提供规范路径,适用于内容管理、后台系统和

weixin_33997389的博客 414

Django、Flask、Tornado框架选型实战指南

Web框架是构建服务端应用的核心基础设施,其本质是HTTP请求处理、路由分发、中间件编排与异步IO调度的技术载体。理解Django的全栈约定、Flask的显式可拆卸设计和Tornado的单线程事件循环原理,有助于规避N+1查询、上下文丢失、连接池耗尽等高频工程陷阱。三者技术价值迥异:Django胜在开箱即用的生产就绪能力,Flask强于轻量嵌入与微服务解耦,Tornado专精高并发长连接场景。典型应用场景包括内部管理系统(Django admin)、边缘设备API(Flask单文件部署)、实时协作服务(To

weixin_33901926的博客 367

Django中的Model继承

Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库;还是让父 model 只包含基本的公共信息,而这些信息只能由子 model 呈现。 Django中有三种继承关系: 1.通常,你只是想用父 model 来保存那些你不想在子 model 中重复录入的信息。父类是不使用的也就是不生成单独的数据表,这种情况下使

huanhu821011的专栏 941

Django ORM学习

Django ORM 重点:对对象操作,结果体现在数据库上。 不修改表的结构的话,不需要make migrations 和make migrate models.py 编写模型类 数据库和类之间的桥梁 类–表 对象–记录 属性–字段 模型类名==表名 继承models.Model 模型类字段 :mysql每种类型与models模块一一对应,例如 varchar 对应models...

weixin_43868436的博客 287

Python+Django+Vue外卖数据分析系统:从环境配置到核心模块解析

在Web应用开发领域,前后端分离架构已成为主流实践模式,其核心原理是通过API接口实现数据交互,提升开发效率和系统可维护性。这种架构的技术价值在于解耦前后端职责,支持团队并行开发,同时便于技术栈的独立演进。在数据分析与可视化场景中,前后端分离架构能够高效处理数据流转,将后端的数据聚合逻辑与前端的可视化渲染有机结合。Django作为Python生态中成熟的Web框架,提供了强大的ORM数据建模能力和RESTful API支持;Vue.js则以其响应式数据绑定和组件化开发特性,成为构建交互式数据仪表盘的热门选择

weixin_33742618的博客 324

Django+GraphQL短链接服务:从原理到高并发生产实践

短链接服务本质是URL映射与重定向系统,其核心在于高效存储、原子计数、低延迟跳转及可扩展分析能力。技术实现上需兼顾关系建模(如Django ORM的事务与迁移)、按需数据获取(GraphQL的精准查询与复杂度控制)以及安全短码生成(哈希截断+冲突回退)。它广泛应用于营销落地页优化、社交媒体文案压缩、A/B测试分流等场景,尤其适合需要自主可控、实时统计与审计能力的中小规模业务。本文聚焦Django与GraphQL协同构建生产级短链系统的关键设计决策与工程细节。

A458545418的博客 495

深入解析Django架构:从MVT模式到请求生命周期与高级扩展

在Web开发领域,理解框架的底层架构是构建稳健、可维护应用的关键。Django作为一款基于MVT设计模式的高效Python Web框架,其核心在于清晰的组件职责划分与数据流控制。架构原理上,它通过模型、视图、模板的协同,以及中间件、URL调度器等机制,构建了一个可预测的请求-响应生命周期。这一设计的技术价值在于,它极大地提升了开发效率,保证了代码的可读性与可测试性,并为处理复杂业务逻辑提供了坚实基础。典型的应用场景包括快速构建内容管理系统、电子商务平台或数据驱动的API服务。本文将聚焦于Django的**核

weixin_33717117的博客 435
上一篇: django QuerySet遇到的几个DateTimeField格式的查询过滤问题
下一篇: django2.0+xadmin2.0d打造权限级管理后台【二】
Python_anning
博客等级 码龄9年 1409粉丝 27原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值