Django-ContentType的使用

摘要:
一、神器ContentType如果继续增加课程价格策略表还得增加字段这样django自带一个contentType帮助我们解决表之间的依赖关系:1.从settings文件可以看到原生就支持contenttype2.自动将创建的表名字单独维护到content_type表3.contenttype实现的效果4.创建表结构models.pyfromdjango.contrib.contenttypes.

一、神器ContentType

Django-ContentType的使用第1张

如果 继续增加课程 价格策略表还得增加字段

这样django自带一个contentType 帮助我们解决表之间的依赖关系:

1.从settings文件可以看到原生就支持contenttype

Django-ContentType的使用第2张

2.自动将创建的表名字 单独维护到content_type表

Django-ContentType的使用第3张

3.contenttype实现的效果

Django-ContentType的使用第4张

4.创建表结构models.py

from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
class DegreeCourse(models.Model):
    """
    学位课表
    """
    name = models.CharField(max_length=32)
class Course(models.Model):
    """
    课程表
    """
    name = models.CharField(max_length=32)
    # 数据库不生成,只用于链表查询
    policy_list = GenericRelation("PricePolicy")
class PricePolicy(models.Model):
    """
    策略表
    """
    content_type = models.ForeignKey(ContentType,verbose_name="关联的表名称") #存表名的id
    object_id = models.PositiveIntegerField(verbose_name="关联表中数据行的id") 
    # 不在数据库中生成,只用于帮助你做数据操作
    content_object = GenericForeignKey('content_type', 'object_id')
    period = models.CharField(max_length=32)
    price = models.FloatField()

5.写测试代码 做增加 删除操作

views.py

deftesttype(request):
    #创建课程golang对应的三个价格列表
    obj = Course.objects.filter(name="golang").first() #获取课程对象
    PricePolicy.objects.create(price=9.9,period=30,content_object=obj) #通过contenttype创建
    obj1 = Course.objects.filter(name="golang").first()
    PricePolicy.objects.create(price=19.9,period=60,content_object=obj1)
    obj2 = Course.objects.filter(name="golang").first()
    PricePolicy.objects.create(price=29.9,period=90,content_object=obj2)
    #取golang课程对应的价格列表
    objs = Course.objects.filter(name="golang").first()
    price_policys =objs.policy_list.all()
    print(price_policys)
    return HttpResponse("...")

PS:

    for priceplicy inprice_list:
        #取出一个个的models对象 . content_obj 就可以去到相对应的
        print(priceplicy.content_obj.name,priceplicy.price, priceplicy.period)
    course_obj = Course.objects.get(id=1)
    obj = course_obj.policy_list.filter(id=3) #和正常一样取值
    objs = course_obj.policy_list.all()

6.返回的结果

Django-ContentType的使用第5张

免责声明:文章转载自《Django-ContentType的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇hihoCoder #1151 : 骨牌覆盖问题·二 (矩阵快速幂,DP)selenium 通过xpath进行元素定位--By.xpath()下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

win10局域网共享报错:不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接

计算机A:共享者(本地文件库);共享访客(工作计算机);计算机A打开另一个帐户-aaa,密码-aaa123。开始文件共享后,计算机B单击网络,发现计算机A已连接。输入帐户密码后,将弹出以下错误。不允许用户使用多个用户名多次连接到服务器或共享资源:断开与此服务器或共享的资源的所有连接。在此链接之前:存在现有连接,或者在建立连接时,现有网络环境已更改,导致帐户被...

MySQL高可用集群方案

资源不足的小团队或小项目直接建议阿里云和腾讯云II。一些常见解决方案介绍1。MySQL主从架构2。MHA架构参考:生产环境MySQL数据库集群MHA在线实现解决方案MHA目前是MySQL高可用性中比较成熟的解决方案。...

从零开始制作Galgame——我的Ren'py学习笔记(一)

然后点击“启动工程”点击“开始游戏”效果应该是这样的好了,现在你就制作出了属于自己的第一个游戏角色在一般的Galgame中,不是所有话都是“旁白”说的,一个完整的游戏里面应该有主角那么,怎么在ren'py中定义角色呢我们把刚才的代码更改一下definel=Characterlabelstart:l"HelloWorld!...

DB2字符函数简介及使用

Param2可以是编码单元16-16位UTF-16编码,也就是说,字符串表示为16位UTF-18编码字符串。Codeunits32-32位UTF-32编码,即字符串表示为32位UTF 32编码字符串。请注意,定义为FORBITDATA的字符串不能转换为图形字符。如果length<length,则来自的原始字符串短于结果中的长度。...

uniapp之页面间传递和接收数组

uni-app如何在页面之前发送和传递数组?如果阵列是直接发送和传递的,则收到的消息如下所示。无法获取更多的对象值。接收数组对象的参数。您可以首先将数组转换为JSON字符串,然后在将其传递到页面后将其解析为JavaScript对象。...

戴尔服务器R740-iDRAC管理卡远程安装系统

Dell服务器R740 iDRAC管理卡安装系统1.方案部署:1.服务器配置名称配置备注CPU 2核心内存128GSwap=128G硬盘2T*8RAID5=12T II。设置iDRAC管理卡地址和连接:iDRAC功能默认关闭,需要在BIOS中启用。由于这是一项测试,默认情况下使用浏览器(Google浏览器)访问iDRAC管理地址,Calvin可以在此处设置新...