• 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 
    都不会在数据库中生成字段,只是方便查询

  • 相关阅读:
    C语言超大数据相加计算整理
    pc端页面加载更多条信息(loading)
    web前端学习路线
    linux启动流程
    Computer Science: http://www.cs.odu.edu/~cs779/
    编程网站
    sublime-text 键绑定
    monokai-background
    .vimrc
    vim 正则表达式查找ip
  • 原文地址:https://www.cnblogs.com/Stay-J/p/8810049.html
Copyright © 2020-2023  润新知