ContentType组件 解决什么问题:表的id和数据id,来唯一确定一条数据 用: 插入数据: models.PricePolicy:content_obj = GenericForeignKey('table_id', 'course_id') views: course=models.Course.objects.filter(pk=1).first() models.PricePolicy.objects.create(period=9,price=100,content_obj=course) 查询数据: 1 查询所有价格策略,并且显示对应的课程名称: models.PricePolicy: from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation content_obj = GenericForeignKey('table_id', 'course_id') views: # ret=models.PricePolicy.objects.all() # for price in ret: # print(type(price.content_obj)) # print(price.content_obj.title) 2 通过课程id,获取课程信息和价格策略: modes.Course from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation policy = GenericRelation('PricePolicy',object_id_field='object_id',content_type_field='content_type') views: # course = models.Course.objects.filter(pk=1).first() # print(course.policy.all()) # for i in course.policy.all(): # print(i.price)
from django.db import models # Create your models here. from django.contrib.contenttypes.models import ContentType # 第二种方式 from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation class Course(models.Model): title=models.CharField(max_length=32) # 三 不会在数据库中生成字段,只用于数据库操作 policy = GenericRelation('PricePolicy',object_id_field='object_id',content_type_field='content_type') class DegreeCourse(models.Model): title=models.CharField(max_length=32) # 三 不会在数据库中生成字段,只用于数据库操作 policy = GenericRelation('PricePolicy', object_id_field='object_id', content_type_field='content_type') class PricePolicy(models.Model): period=models.IntegerField() price=models.PositiveIntegerField() content_type=models.ForeignKey(to=ContentType,null=True) #表名 object_id=models.PositiveIntegerField(null=True) #课程id # 第二种方式 # 引入一个字段,不会在数据库中创建,只用来做数据库操作 content_obj = GenericForeignKey('content_type', 'object_id')
from django.shortcuts import render,HttpResponse # Create your views here. from app01 import models def addPrice(request): ''' 为专题课,添加三个价格策略 查询所有价格策略,并且显示对应的课程名称 通过课程id,获取课程信息和价格策略 ''' # 为专题课django课程,添加三个价格策略 # 1 普通方式 # course=models.Course.objects.filter(pk=1).first() # content=models.ContentType.objects.filter(model='course').first() # models.PricePolicy.objects.create(period=1,price=0,object_id=course.pk,content_type_id=content.pk) # models.PricePolicy.objects.create(period=3,price=49,object_id=course.pk,content_type_id=content.pk) # models.PricePolicy.objects.create(period=6,price=69,object_id=course.pk,content_type_id=content.pk) # 2 GenericForeignKey # course=models.Course.objects.filter(pk=1).first() # models.PricePolicy.objects.create(period=9,price=100,content_obj=course) # 为Python全站开发学位课,加一个价格策略 # degree = models.DegreeCourse.objects.filter(pk=1).first() # models.PricePolicy.objects.create(period=2,price=50,content_obj=degree) # 二 查询所有价格策略,并且显示对应的课程名称 # ret=models.PricePolicy.objects.all() # for price in ret: # print(type(price.content_obj)) # print(price.content_obj.title) #三 通过课程id,获取课程信息和价格策略 # course = models.Course.objects.filter(pk=1).first() # print(course.policy.all()) # for i in course.policy.all(): # print(i.price) # 查专题课程 python全站开发 degree = models.DegreeCourse.objects.filter(pk=1).first() print(degree.policy.all()) for i in degree.policy.all(): print(i.price) return HttpResponse('ok')
"""day06 URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.11/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^test/', views.addPrice), ]