Django中ContentType组件怎么用
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关Django中ContentType组件怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题如何在一张表上对多个表进行外键关联fro
千家信息网最后更新 2025年11月07日Django中ContentType组件怎么用
这篇文章将为大家详细讲解有关Django中ContentType组件怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
问题
如何在一张表上对多个表进行外键关联
from django.db import modelsclass Appliance(models.Model): """ 家用电器表 id name 1 冰箱 2 电视 3 洗衣机 """ name = models.CharField(max_length=64)class Food(models.Model): """ 食物表 id name 1 面包 2 牛奶 """ name = models.CharField(max_length=32)class Fruit(models.Model): """ 水果表 id name 1 苹果 2 香蕉 """ name = models.CharField(max_length=32)class Coupon(models.Model): """ 优惠券表 id name appliance_id food_id fruit_id 1 通用优惠券 null null null 2 冰箱折扣券 1 null null 3 电视折扣券 2 null null 4 苹果满减卷 null null 1 """ name = models.CharField(max_length=32) appliance = models.ForeignKey(to="Appliance", null=True, blank=True) food = models.ForeignKey(to="Food", null=True, blank=True) fruit = models.ForeignKey(to="Fruit", null=True, blank=True)
注意
1.每增加一张表就需要多增加一个字段,
定义
当一张表要跟多张表进行外键关联的时候,我们可以使用Django提供的ContentType 组件
ContentTypes是Django内置的一个组件,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中
app1/models.py
#!/usr/bin/env python3# -*- coding: utf-8 -*-from django.db import modelsfrom django.contrib.contenttypes.models import ContentTypefrom django.contrib.contenttypes.fields import GenericForeignKey, GenericRelationclass Food(models.Model): """ id title 1 面包 2 牛奶 """ title = models.CharField(max_length=32) # 不会生成coupons字段,只用于反向查询 coupons = GenericRelation(to="Coupon")class Fruit(models.Model): """ id title 1 苹果 2 香蕉 """ title = models.CharField(max_length=32)class Coupon(models.Model): title = models.CharField(max_length=32) # 第一步:在 model中定义ForeignKey字段,并关联到ContentType表 content_type = models.ForeignKey(to=ContentType, on_delete=None) # 第二步:定义IntegerField字段,用来存储关联表中的主键 object_id = models.IntegerField() # 第三步 不会生成字段传入上面两个字段的名字 content_object = GenericForeignKey("content_type", "object_id")app1\view.py
class DemoView(APIView): def get(self, request): # 1.通过ContentType表找表模型 content = ContentType.objects.filter(app_label="app1", model="food").first() # 获得表model对象 相当于models.app1 model_class = content.model_class() ret = model_class.objects.all() print(ret) # 给面包创建一个优惠券 food_obj = Food.objects.filter(id=1).first() Coupon.objects.create(title="面包九五折", content_type_id=8, object_id=1) Coupon.objects.create(title="双十一面包九折促销", content_object=food_obj) # 正向查询:根据优惠信息查询优惠对象 coupon_obj = Coupon.objects.filter(id=1).first() content_obj = coupon_obj.content_object print(content_obj.title) # 反向查询:查询面包都有哪些优惠券 coupons = food_obj.coupons.all() print(coupons[0].title) # 如果没定义反向查询 content = ContentType.objects.filter(app_label="app1", model="food").first() result = Coupon.objects.filter(content_type=content, object_id=1).all() print(result[0].name) return Response("ContentType测试")关于"Django中ContentType组件怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
字段
面包
优惠
查询
组件
优惠券
关联
篇文章
苹果
冰箱
对象
折扣
更多
牛奶
电视
香蕉
生成
不错
实用
家用电器
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
环境服务器安全吗
信息化网络安全主题
excel使用ac数据库
网络安全中的网站安全
数据库字典如何生成
智成数据库
网络安全公司分析
广东应用软件开发哪家可靠
安徽省软件开发工时标准
数据库检测语句
软件开发源头
手机网络错误无法连接服务器
金融贷款风控大数据库
配置与管理流媒体服务器
网络安全的法律
学籍管理数据库心得
订单号数据库中的类型
微易发是什么软件开发的
常州基础网络技术推荐咨询
德仁顾问咨询数据库
东方大陆服务器ip
传奇服务器开区教学
互联网根服务器运行方
深圳app软件开发哪家好
知名专业软件开发公司有哪些
网络安全从我做起手抄报照片
开展网络安全应急处置演练
吉林大学网络安全专业
济宁直播软件开发企业
深圳聚有网络技术有限公司