django内置的组件,帮我们开发者做连表操作, 使用于一张表跟多张表关联。
使用:
ContentType
用于关联表的名称GenericForeignKey
帮助快速实现content_type操作,将之对应起来GenericRelation
用于反向查找 不生成数据表
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
# Create your models here.
class Course(models.Model):
"""普通课"""
title = models.CharField(max_length=32)
# 仅用于反向查找,不生成数据表
price_policy_list = GenericRelation("PricePolicy")
class DegreeCourse(models.Model):
"""学位课"""
title = models.CharField(max_length=32)
class PricePolicy(models.Model):
"""价格策略"""
price = models.IntegerField()
period = models.IntegerField()
content_type = models.ForeignKey(ContentType, verbose_name='关联的表名称')
object_id = models.IntegerField(verbose_name='关联的表中数据行的ID')
# 帮助快速实现content_type操作
content_object = GenericForeignKey('content_type', 'object_id')
# view
from django.shortcuts import render, HttpResponse
from app01 import models
def test(request):
# 1 为学位课“python 全栈” 添加一个价格策略: 1个月9.9的数据
obj = models.DegreeCourse.objects.filter(title='python全栈').first()
models.PricePolicy.objects.create(price=9.9, period=30, content_object=obj)
# 2 查找出课程ID 为1的所有的价格策略
course = models.Course.objects.filter(id=1).first()
price_policys = course.price_policy_list.all()
print(price_policys, '这就是所有的价格')
return HttpResponse('添加成功')