1. 程式人生 > >Django content-type 使用

Django content-type 使用

app 找到 查看 rsh val blog spl together 其他

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 使用