• Django content-type 使用


    1.models

    class PricePolicy(models.Model):
        """价格与有课程效期表"""
        content_type = models.ForeignKey(ContentType)
        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()
    
        class Meta:
            unique_together = ("content_type", 'object_id', "valid_period")
    
        def __str__(self):
            return "%s(%s)%s" % (self.content_object, self.get_valid_period_display(), self.price)
        class Meta:
            verbose_name = "价格与有课程效期表"
            verbose_name_plural = "价格与有课程效期表"
    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="学位课程简介", )
        total_scholarship = models.PositiveIntegerField(verbose_name="总奖学金(贝里)", default=40000)
        mentor_compensation_bonus = models.PositiveIntegerField(verbose_name="本课程的导师辅导费用(贝里)", default=15000)
        # 忽略,用于GenericForeignKey反向查询, 不会生成表字段,切勿删除
        coupon = GenericRelation("Coupon")
    
        # 为了计算学位奖学金
        period = models.PositiveIntegerField(verbose_name="建议学习周期(days)", default=150)
        prerequisite = models.TextField(verbose_name="课程先修要求", max_length=1024)
        teachers = models.ManyToManyField("Teacher", verbose_name="课程讲师")
    
        # 忽略,用于GenericForeignKey反向查询,不会生成表字段,切勿删除
        degreecourse_price_policy = GenericRelation("PricePolicy")
    
        def __str__(self):
            return self.name
        class Meta:
            verbose_name = "学位课程"
            ve
    rbose_name_plural = "学位课程"

    2.views

    正向查找:models对象.content_object得到的是models对象

    反向查找:models对象.反向关联字段.all()得到的是QuerySet对象

    添加:content_type+_id其他不变

    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    
    from app01 import models
    
    def index(request):
        '''查看价格与有课程效期表'''
        DegreeCourse_obj=models.PricePolicy.objects.get(id=1).content_object
        '''通过content_object直接找到与其关联的models对象'''
        print('aaaaa',DegreeCourse_obj,type(DegreeCourse_obj))
        '''反向关联查找'''
        b = models.DegreeCourse.objects.get(id=1).degreecourse_price_policy.all()
        print('bbbb',b)
        '''ADD'''
        models.PricePolicy.objects.create(content_type_id=1,object_id=1,valid_period=60,price=6666)
        return HttpResponse('ok!!!')
  • 相关阅读:
    Swift学习二
    Swift学习一
    iOS--点击地图上某一点获取该点的经纬度
    iOS--新特性一览
    搭建LNAMP环境(三)- 源码安装Apache2.4
    搭建LNAMP环境(四)- 源码安装PHP7
    搭建LNAMP环境(五)- PHP7源码安装Redis和Redis拓展
    搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展
    搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展
    PHP安装mysql.so扩展
  • 原文地址:https://www.cnblogs.com/supery007/p/8475567.html
Copyright © 2020-2023  润新知