ContentType组件

本文深入探讨了Django框架中的ContentType组件,解释了如何利用它进行高效的连表操作,特别是在处理多类型课程价格策略场景下,避免了手动创建中间表的复杂性,提供了具体的模型定义和视图操作示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContentType组件

django提供的一个快速连表操作的组件

适用于:一个字段确定不了唯一;

  如:pricepolicy表中,course_id和content_type中对应的课程类型id才能确定唯一;

model.py中新建的类会自动在contenttype表新增字段;

避免自己在建立中间表;

 

使用,在models.py中:
课程可能会有免费课,轻课,收费课等
from
django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation class Course(models.Model): name = models.CharField(max_length=32) # 不会在数据库生成数据,只是用来连表操作 price_police=GenericRelation(to='PricePolicy') class PricePolicy(models.Model): period = models.IntegerField() price = models.CharField(max_length=32) # 注意不能用外键关联 # course_id = models.IntegerField(null=True)

#由于课程有多个,需要两个字段才能确定唯一,课程id不能用外键,因为对应多个。
     #命名必须用object_id 替代course_id,在调用GenericForeignKey时,就不用再传参数
object_id = models.IntegerField(null=True) content_type = models.ForeignKey(to=ContentType,null=True) # 该字段不会在数据库生成字段,只是用来做连表操作 obj=GenericForeignKey()
在view.py中使用:
    1 为django入门课,添加三个价格策略
        ret = models.PricePolicy.objects.create(period=60, price='99.9', obj=course)
    2 查询所有价格策略,并且显示对应的课程名称
        ret=models.PricePolicy.objects.all()
        for i in ret:
            print(i.price)
            print(i.obj.name)  #课程名称
    3 通过课程id,获取课程信息和价格策略
        course=models.Course.objects.get(pk=1)
        price_polices=course.price_police.all()
        for i in price_polices:
            print(i.price)
            print(i.period)

 

posted @ 2019-03-01 09:37 ChuckXue 阅读( ...) 评论( ...) 编辑 收藏
基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值