model 代码
from django.db import modelsfrom django.contrib.contenttypes.models import ContentType #django自带的ContentType表#GenericRelation 不生成字段只用于反向查询 GenericForeignKey 不会生成字段 只用于关联到对象的from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation class Food(models.Model): name=models.CharField(max_length=32) coupons=GenericRelation(to='Coupon') # 不生成字段只用于反向查询 class Fruit(models.Model): name=models.CharField(max_length=32) coupons=GenericRelation(to='Coupon') # 不生成字段只用于反向查询 class Coupon(models.Model): title=models.CharField(max_length=32) #用django自带的ContentType表 content_type=models.ForeignKey(to=ContentType) object_id=models.IntegerField() # 不会生成字段 只用于关联到对象的 content_object=GenericForeignKey('content_type','object_id')
视图查询 代码
from Dome.models import Food,Fruit,Couponfrom django.contrib.contenttypes.models import ContentType class Test(APIView): def get(self,request): ''' # 找到表id以及表对象 content_type_obj=ContentType.objects.filter(app_label='Dome',model='food').first()#表名要小写 print(content_type_obj) #返回表名 model_class=content_type_obj.model_class() #model_class()方法 print(model_class) #返回是一个对象 ''' """ # 给酱香饼创建优惠券 food_obj=Food.objects.filter(id=1).first() Coupon.objects.create(title='打折',content_object=food_obj) #content_object= 用这个隐层的字段 """ """ # 给黑美人加优惠券 fruit_obj=Fruit.objects.get(id=2) Coupon.objects.create(title='不要了',content_type_id=9,object_id=2) """ """ # 查询优惠券绑定对象 compon_obj=Coupon.objects.filter(id=1).first() print(compon_obj.content_object.name) """ """ # 查某个对象的优惠券 food_obj=Food.objects.filter(id=1).first() print(food_obj.coupons.all()) """ return HttpResponse("ok")