zoukankan      html  css  js  c++  java
  • Django-ContentType

    背景:学位课、专题课、价格策略(每一种课程(学位课和专题课下可分为不同的种类的课程)在不同学习时间内的价格不同)

    例如:如何将课程表与价格策略表关联起来:

    用外键是可以将课程表和价格策略表关联起来的,但是在后面对表数据的操作起来会非常的复杂,所以我们可以使用Django的ContentType组件来完成:

    model.py

    class Course(models.Model):
        name=models.CharField(max_length=32,verbose_name="专题课程")
    
    class DegreeCourse(models.Model):
        name=models.CharField(max_length=32,verbose_name="学位课程")
    
    class PricePolicy(models.Model):
    
        period=models.CharField(max_length=32,verbose_name="周期")
        price=models.FloatField(verbose_name="价格")

    得到表:

    django_content_type表(可以用次表与价格策略表关联)

    model.py  加入次字段即可关联PricePolicy表

    
    
    from django.contrib.contenttypes.models import ContentType

    class
    Course(models.Model): name=models.CharField(max_length=32,verbose_name="专题课程") class DegreeCourse(models.Model): name=models.CharField(max_length=32,verbose_name="学位课程") class PricePolicy(models.Model): content_type=models.ForeignKey(ContentType) object_id=models.PositiveSmallIntegerField() period=models.CharField(max_length=32,verbose_name="周期") price=models.FloatField(verbose_name="价格")
    PricePolicy表

    关于链表查询

    model.py

    class Course(models.Model):
        name=models.CharField(max_length=32,verbose_name="专题课程")
    
    class DegreeCourse(models.Model):
        name=models.CharField(max_length=32,verbose_name="学位课程")
        # 数据库不生成,只用于链表查询
        policy_list = GenericRelation("PricePolicy")
    
    class PricePolicy(models.Model):
        content_type=models.ForeignKey(ContentType)
        object_id=models.PositiveSmallIntegerField(verbose_name="正整数")
    
        # 不在数据库中生成,只用于帮助你做数据操作
        content_object=GenericForeignKey("content_type","object_id")
    
        period=models.CharField(max_length=32,verbose_name="周期")
        price=models.FloatField(verbose_name="价格")

    views.py

    from .models import *
    def index(request):
        # 为专题课1添加2个价格策略
        # course=Course.objects.get(id=1)
        # PricePolicy.objects.create(period=10,price="19.2",content_object=course)
        # PricePolicy.objects.create(period=20,price="119.2",content_object=course)
    
        # 显示所有的价格策略,并将其对应的课程名称显示。
        # price_list=PricePolicy.objects.all()
        # for obj in price_list:
        #     print(obj.content_object.id,obj.period,("天"),obj.content_object.name)
            #1 10 天 7天python入门
            # 1 10 天 7天python入门
            # 1 20 天 7天python入门
            # 2 10 天 21天python放弃
            # 2 20 天 21天python放弃
    
    
        # 给你课程ID,获取课程信息+该课程的所有价格策略
        course_obj = Course.objects.get(id=2)
        print(course_obj.id)
        print(course_obj.name)
        policy_list = course_obj.policy_list.all()
        for item in policy_list:
            print(item.price, item.period)
        return HttpResponse("ok")
     
  • 相关阅读:
    mysql8.0授权远程登录
    vbox 网络配置
    dnmp安装
    Unix/Linux环境C编程入门教程(7) OPENBSDCCPP开发环境搭建
    Unix/Linux环境C编程入门教程(6) 安装Fedora C/C++开发环境
    Unix/Linux环境C编程入门教程(5) Red Hat Enterprise Linux(RHEL)环境搭建
    Unix/Linux环境C编程入门教程(4) Debian Linux环境搭建
    C语言入门(8)——形参与实参
    C语言入门(7)——自定义函数
    C语言入门(6)——C语言常用数学函数
  • 原文地址:https://www.cnblogs.com/caochao-/p/8810445.html
Copyright © 2011-2022 走看看