zoukankan      html  css  js  c++  java
  • django中的ContentType使用

    使用背景

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

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

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

    然后就想着这么设计但是这么设计我在查表的时候实在是太麻烦了,后来发现了ContentType这个神器啊:

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

     表的创建

    from django.db import models
    
    # Create your models here.
    
    
    from django.db import models
    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)
        object_id = models.PositiveIntegerField()
    
        # 不在数据库中生成,只用于帮助你做数据操作
        content_object = GenericForeignKey('content_type', 'object_id')
    
        period = models.CharField(max_length=32)
        price = models.FloatField()
    model.py

     

    def index(request):
        course_obj = Course.objects.get(id=2)
        # content_obj 是GenericForeignKey 便于操作直接赋予对象即可
        PricePolicy.objects.create(period='110', price=9.9, content_object=course_obj)
        PricePolicy.objects.create(period='120', price=19.9, content_object=course_obj)
        PricePolicy.objects.create(period='130', price=29.9, content_object=course_obj)
        price_list = PricePolicy.objects.all()
    
        for priceplicy in price_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()
        
        print(obj)
        return HttpResponse('ok')
    views.py
    GenericForeignKey, GenericRelation 
    都不会在数据库中生成字段,只是方便查询

  • 相关阅读:
    google搜索引擎使用方法
    通过Ajax和SpringBoot交互的示例
    利用html sessionStorge 来保存局部页面在刷新后回显,保留
    JS页面刷新保持数据不丢失
    Firefox浏览器中,input输入框输入的内容在刷新网页后为何还在?
    关于form/input 的autocomplete="off"属性
    Java对日期Date类进行加减运算,年份加减,月份加减
    select标签设置只读的方法(下拉框不可选但可传值)
    用Thymeleaf在前台下拉列表取值
    jsp页面动态展示list-使用<select>和<c:forEach>标签
  • 原文地址:https://www.cnblogs.com/Stay-J/p/8810049.html
Copyright © 2011-2022 走看看