zoukankan      html  css  js  c++  java
  • contenttype组件

    看到contenttype是不是很熟悉啊,之前在请求头中看到过,但这个跟请求头中那个content_type一点关系都没有。这是跟表结构有关的组件。

    组件的作用

    可以通过两个字段让表和N张表创建FK关系

    表结构

    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=128, unique=True)
        course_img = models.CharField(max_length=255, verbose_name="缩略图")
        brief = models.TextField(verbose_name="学位课程简介", )
    
    
    class Course(models.Model):
        """专题课程"""
        name = models.CharField(max_length=128, unique=True)
        course_img = models.CharField(max_length=255)
    
        # 不会在数据库生成列,只用于帮助你进行查询
        policy_list = GenericRelation("PricePolicy")
    
    
    class PricePolicy(models.Model):
        """价格与有课程效期表"""
        content_type = models.ForeignKey(ContentType)  # 关联course or degree_course
        object_id = models.PositiveIntegerField()
    
        #不会在数据库生成列,只用于帮助你进行添加和查询
        content_object = GenericForeignKey('content_type', 'object_id')
    
    
        valid_period_choices = (
            (1, '1天'),
            (3, '3天'),
            (7, '1周'), (14, '2周'),
            (30, '1个月'),
            (60, '2个月'),
            (90, '3个月'),
            (180, '6个月'), (210, '12个月'),
            (540, '18个月'), (720, '24个月'),
        )
        valid_period = models.SmallIntegerField(choices=valid_period_choices)
        price = models.FloatField()  

    使用:

    先导入组件

    from django.contrib.contenttypes.models import ContentType  

    导入表

    from app01 import models 

    练习:

    1、在价格策略表中添加一条数据

    models.PricePolicy.objects.create(
             valid_period=7,
             price=6.6,
             content_type=ContentType.objects.get(model='course'),
            object_id=1
         )
    
         models.PricePolicy.objects.create(
             valid_period=14,
             price=9.9,
             content_object=models.Course.objects.get(id=1)
         )
    

    2、根据某个价格策略对象,找到他对应的表和数据,如:管理课程名称

    price = models.PricePolicy.objects.get(id=2)
    print(price.content_object.name) # 自动帮你找到
    

    3、找到某个课程关联的所有价格策略

    obj = models.Course.objects.get(id=1)
        for item in obj.policy_list.all():
             print(item.id,item.valid_period,item.price)
    

      

      

      

      

     

  • 相关阅读:
    VUE 脚手架模板搭建
    defineProperty
    理解JS中的call、apply、bind方法
    Two-phase Termination模式
    打印样式设计
    浏览器内部工作原理
    Immutable Object模式
    怎么跳出MySQL的10个大坑
    控制台console
    整理的Java资源
  • 原文地址:https://www.cnblogs.com/gaoya666/p/9114567.html
Copyright © 2011-2022 走看看