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!!!')
原文地址:https://www.cnblogs.com/supery007/p/8475567.html