• django中的ContentType使用


    #比如有专题课,学位课,等其他课程,都有价格,怎么把价格都弄在一张表上

    models.py

    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()

    views.py

    from django.shortcuts import render,HttpResponse
    from app01 import models
    from django.contrib.contenttypes.models import ContentType
    
    #比如有专题课,学位课,等其他课程,都有价格策略,怎么把价格都弄在一张表上
    #在价格策略表添加
    #这两个字段名不能变
        #content_type = models.ForeignKey(ContentType)  # 关联ContentType表中的course 或者 degree_course或者其他
        #object_id = models.PositiveIntegerField()
    
        #不会在数据库生成列,只用于帮助你进行添加和查询
        #content_object = GenericForeignKey('content_type', 'object_id')
    
    def test(request):
        # 1.在价格策略表中添加一条数据,不加content_object = GenericForeignKey('content_type', 'object_id')
        # models.PricePolicy.objects.create(
        #     valid_period=7,
        #     price=6.6,
        #     content_type=ContentType.objects.get(model='course'),
        #     object_id=1
        # )
        #2.加content_object = GenericForeignKey('content_type', 'object_id')后
         # GenericForeignKey这个字段会帮我们自动添加
        # 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.找到某个课程关联的所有价格策略 用GenericRelation
        # obj = models.Course.objects.get(id=1)
        # for item in obj.policy_list.all():
        #     print(item.id,item.valid_period,item.price)
        #
        return HttpResponse('...')

    urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^test/', views.test),
    ]
  • 相关阅读:
    贰、js的基础(二)类型转换
    贰、js的基础(一)
    ajax的异步请求小结
    壹、js的概述
    sass的用法小结(四)进阶篇
    sass的用法小结(三)
    sass的用法小结(二)
    sass的用法小结(一)
    H5页面在线制作工具搜集
    H5教程:移动页面性能优化
  • 原文地址:https://www.cnblogs.com/chvv/p/10076525.html
Copyright © 2020-2023  润新知