zoukankan      html  css  js  c++  java
  • contenttypes

    一、contenttypes介绍

    它的作用:可以通过两个字段让表和N张表创建FK关系

    二、ContentType、GenericForeignKey、GenericRelation

    表结构:
        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()
    使用:
        # 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)
        #

    三、总结

    两个字段让表和N张表创建FK关系得时候; 利用ContentType,查询和插入都很方便。

    ContentType 

       自动关联到这张表

    GenericForeignKey、GenericRelation

       插入数据 和 查询数据 都很方便

      正向,反向查都很方便,灵活应用!

      

  • 相关阅读:
    Android WebService Does not support output
    textarea 内容对齐
    win7 下使用ssh连接vmare下的ubuntu系统
    myeclipse6.5 下无法使用tomcat7
    connectmongo.js 中出错 var Store = connect.session.Stroe
    linux tomcat7 ServerLifecycleListener类找不到
    SQL CASE 多条件用法
    myeclipse快捷键大全
    hibernat 中new对象进行查询
    SQL语句删除表中重复字段
  • 原文地址:https://www.cnblogs.com/alice-bj/p/9344567.html
Copyright © 2011-2022 走看看