Django content-type 使用

Posted Pythia丶陌乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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!!!)

 

以上是关于Django content-type 使用的主要内容,如果未能解决你的问题,请参考以下文章

Linux内核设计第二周学习总结 完成一个简单的时间片轮转多道程序内核代码

VMware Workstation/Fusion 中安装 Fedora 23/24 及其他 Linux 系统时使用 Open VM Tools 代替 VMware Tools 增强工具的方法(代码片

基于mykernel的一个简单的时间片轮转多道程序内核代码分析

linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码

lab2:完成一个简单的时间片轮转多道程序内核代码

linux线程时间片多长