from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.fields import GenericRelation class Course(models.Model): price_policy = GenericRelation("PricePolicy") class PricePolicy(models.Model): """價格與有課程效期表""" content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) # 關(guān)聯(lián)course or degree_course object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type', 'object_id') 一種課程有多種價格策略 在course表中: class Couser(models.Model): title = models.CharField(max_length=32) # 不需要做數(shù)據(jù)庫遷移,這個字段不會在數(shù)據(jù)表中生成,只用來方便查詢 policy = GenericRelation('PricePolicy', object_id_field='course_id'#對應(yīng)的是價格策略表中的course_id, content_type_field='table_id'#對應(yīng)的是價格策略表中的table_id) 在價格策略表中: class PricePolicy(models.Model): price = models.DecimalField(max_digits=8, decimal_places=2) period = models.CharField(max_length=32) # 強(qiáng)調(diào):如果是外部導(dǎo)入的表,不能帶引號, # 表的id table_id = models.ForeignKey(to=ContentType) # table_bb = models.ForeignKey(to='contenttypes.ContentType') # 課程id course_id = models.IntegerField() # PositiveIntegerField()---正整數(shù) # 如果表id 字段名叫:content_type ,課程id字段名叫:object_id GenericForeignKey就不需要傳參數(shù) # 不需要做數(shù)據(jù)庫遷移,也不會再數(shù)據(jù)庫生成字段,只用來做查詢和插入 # 如果保存的時候,只需要傳content_obj這個字段,內(nèi)部自動會保存table_id,course_id content_obj = GenericForeignKey('table_id','course_id')
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。