django中的ContentType使用


使用背景

  最近設計表的時候遇到一個問題,有兩門課程  一門專業課,一門學位課,我們按照時間長度來進行售賣,比如專業課一個月19元,兩個月35元,三個月50元。

可以這么做但是領導不讓我這么設計。。。。。。

所以就想着用第三章表來實現需求

然后就想着這么設計但是這么設計我在查表的時候實在是太麻煩了,后來發現了ContentType這個神器啊:

這是Django中自帶的ContentType這張表中就有我創建的那三張表(學位課表,專業課表,價格策略表),所以表結構如下

 

 表的創建

from django.db import models

# Create your models here.


from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation


class DegreeCourse(models.Model):
    name = models.CharField(max_length=32)


class Course(models.Model):
    name = models.CharField(max_length=32)

    # 數據庫不生成,只用於鏈表查詢
    policy_list = GenericRelation("PricePolicy")


class PricePolicy(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()

    # 不在數據庫中生成,只用於幫助你做數據操作
    content_object = GenericForeignKey('content_type', 'object_id')

    period = models.CharField(max_length=32)
    price = models.FloatField()
model.py

 

def index(request):
    course_obj = Course.objects.get(id=2)
    # content_obj 是GenericForeignKey 便於操作直接賦予對象即可
    PricePolicy.objects.create(period='110', price=9.9, content_object=course_obj)
    PricePolicy.objects.create(period='120', price=19.9, content_object=course_obj)
    PricePolicy.objects.create(period='130', price=29.9, content_object=course_obj)
    price_list = PricePolicy.objects.all()

    for priceplicy in price_list:
        # 取出一個個的models對象 . content_obj 就可以去到相對應的
        print(priceplicy.content_obj.name,priceplicy.price, priceplicy.period)

    course_obj = Course.objects.get(id=1)
    obj = course_obj.policy_list.filter(id=3)
    objs = course_obj.policy_list.all()
    
    print(obj)
    return HttpResponse('ok')
views.py

 

GenericForeignKey, GenericRelation 
都不會在數據庫中生成字段,只是方便查詢

 


免責聲明!

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



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