Django contenttype

本文介绍如何利用Django的ContentType和GenericForeignKey实现多表之间的灵活关联,以解决不同类型的课程及其价格策略的设计问题。

Django ContentTypes是由Django框架提供的一个核心功能,它对当前项目中所有基于Django驱动的model提供了更高层次的抽象封装。
当使用Django-admin初始化一个django项目的时候,可以看到在默认的INSTALL_APPS已经包含了django.contrib.contenttypes:

1 INSTALLED_APPS = [
2 'django.contrib.admin',
3 'django.contrib.auth',
4 'django.contrib.contenttypes',
5 'django.contrib.sessions',
6 'django.contrib.messages',
7 'django.contrib.staticfiles',
8 ]

使用背景:最近设计表的时候遇到一个问题,有两门课程  一门专业课,一门学位课,我们按照时间长度来进行售卖,比如专业课一个月19元,两个月35元,三个月50元。

可以这么做但是领导不让我这么设计。。。。。。

所以就想着用第三章表来实现需求

这是Django中自带的ContentType这张表中就有我创建的那三张表(学位课表,专业课表,价格策略表),所以表结构如下

 1 from django.db import models
 2 
 3 # Create your models here.
 4 
 5 
 6 from django.db import models
 7 from django.contrib.contenttypes.models import ContentType
 8 from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
 9 
10 
11 class DegreeCourse(models.Model):
12     name = models.CharField(max_length=32)
13 
14 
15 class Course(models.Model):
16     name = models.CharField(max_length=32)
17 
18     # 数据库不生成,只用于链表查询
19     policy_list = GenericRelation("PricePolicy")
20 
21 
22 class PricePolicy(models.Model):
23     content_type = models.ForeignKey(ContentType)
24     object_id = models.PositiveIntegerField()
25 
26     # 不在数据库中生成,只用于帮助你做数据操作
27     content_object = GenericForeignKey('content_type', 'object_id')
28 
29     period = models.CharField(max_length=32)
30     price = models.FloatField()
31 
32 model.py
 1 def index(request):
 2     course_obj = Course.objects.get(id=2)
 3     #从PricePolicy创建数据 content_obj 是GenericForeignKey 便于操作直接赋予对象即可
 4     PricePolicy.objects.create(period='110', price=9.9, content_object=course_obj)
 5     PricePolicy.objects.create(period='120', price=19.9, content_object=course_obj)
 6     PricePolicy.objects.create(period='130', price=29.9, content_object=course_obj)
 7     price_list = PricePolicy.objects.all()
 8 
 9     for priceplicy in price_list:
10         # 取出一个个的models对象 . content_obj 就可以去到相对应的
11         print(priceplicy.content_object.name,priceplicy.price, priceplicy.period)
12    #通过Course对象,获取对用的所有价格
13     course_obj = Course.objects.get(id=1)
14     obj = course_obj.policy_list.filter(id=3)
15     objs = course_obj.policy_list.all()
16     
17     print(obj)
18     return HttpResponse('ok')
19 
20 views.py

 

总结:

GenericRelation和GenericForeignKey实现了双向查找

  当一张表作为多个表的FK,并且只能选择其中一个或者几个时,就可以使用content_type表;例如上面的优惠券表,被食物和衣服当作FK,数据库表一旦建立就难以更改,如果以后需要增加电器等表并把优惠券表作为FK表,这时就不能做到在优惠券表增加列字段electr_id,因为表只能增加行记录而不能增加列字段,因此就可以使用content_type表来将表与表中的对象进行关联,从而做到不增加列字段的情况下增加FK关系。

  在使用content_type表时,需要在FK表中增加content_type作为FK字段,并增加GenericForeignKey便于优惠券表记录的建立以及单个优惠券对象对应的其他商品的查找。在优惠券表关联的“一”的关系表中增加GenericRelation字段便于查找关联的优惠券记录的查找

转载于:https://www.cnblogs.com/daidechong/p/10445541.html

本文旨在系统阐述利用MATLAB平台执行多模态语音分离任务的方法,重点围绕LRS3数据集的数据生成流程展开。LRS3(长时RGB+音频语音数据集)作为一个规模庞大的视频与音频集合,整合了丰富的视觉与听觉信息,适用于语音识别、语音分离及情感分析等多种研究场景。MATLAB凭借其高效的数值计算能力与完备的编程环境,成为处理此类多模态任务的适宜工具。 多模态语音分离的核心在于综合利用视觉与听觉等多种输入信息来解析语音信号。具体而言,该任务的目标是从混合音频中分离出不同说话人的声音,并借助视频中的唇部运动信息作为辅助线索。LRS3数据集包含大量同步的视频与音频片段,提供RGB视频、单声道音频及对应的文本转录,为多模态语音处理算法的开发与评估提供了重要平台。其高质量与大容量使其成为该领域的关键资源。 在相关资源包中,主要包含以下两部分内容: 1. 说明文档:该文件详细阐述了项目的整体结构、代码运行方式、预期结果以及可能遇到的问题与解决方案。在进行数据处理或模型训练前,仔细阅读此文档对正确理解与操作代码至关重要。 2. 专用于语音分离任务的LRS3数据集版本:解压后可获得原始的视频、音频及转录文件,这些数据将由MATLAB脚本读取并用于生成后续训练与测试所需的数据。 基于MATLAB的多模态语音分离通常遵循以下步骤: 1. 数据预处理:从LRS3数据集中提取每段视频的音频特征与视觉特征。音频特征可包括梅尔频率倒谱系数、感知线性预测系数等;视觉特征则涉及唇部运动的检测与关键点定位。 2. 特征融合:将提取的音频特征与视觉特征相结合,构建多模态表示。融合方式可采用简单拼接、加权融合或基于深度学习模型的复杂方法。 3. 模型构建:设计并实现用于语音分离的模型。传统方法可采用自适应滤波器或矩阵分解,而深度学习方法如U-Net、Transformer等在多模态学习中表现优异。 4. 训练与优化:使用预处理后的数据对模型进行训练,并通过交叉验证与超参数调整来优化模型性能。 5. 评估与应用:采用信号失真比、信号干扰比及信号伪影比等标准指标评估模型性能。若结果满足要求,该模型可进一步应用于实际语音分离任务。 借助MATLAB强大的矩阵运算功能与信号处理工具箱,上述步骤得以有效实施。需注意的是,多模态任务常需大量计算资源,处理大规模数据集时可能需要对代码进行优化或借助GPU加速。所提供的MATLAB脚本为多模态语音分离研究奠定了基础,通过深入理解与运用这些脚本,研究者可更扎实地掌握语音分离的原理,从而提升其在实用场景中的性能表现。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值