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!!!')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM