Django包含一个contenttypes应用程序(app),可以跟踪Django项目中安装的所有模型(Model),提供用于处理模型的高级通用接口。

生成表结构之后有一个表,包含所有其他表

该组件主要应用于像不同的帖子和不同的照片都有评论,但是想只用一张评论表去存储,评论表中应有一个字段说明属于帖子还是照片,有一个字段说明该评论属于具体哪个帖子、哪个照片。

from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation,ContentType
class Post(models.Model):"""帖子表"""title = models.CharField(max_length=72)# 查看一个对象的全部评论用comments,创建时用GenericRelationcomments=GenericRelation('Comment')
class Picture(models.Model):"""图片表"""image = models.ImageField()comments = GenericRelation('Comment')class Comment(models.Model):"""评论表"""content = models.TextField()# post = models.ForeignKey(Post, null=True, blank=True, on_delete=models.CASCADE)# picture = models.ForeignKey(Picture, null=True, blank=True, on_delete=models.CASCADE)# 外键关联ContentType(其中有所有的表)content_type=models.ForeignKey(ContentType,on_delete=models.DO_NOTHING)# 关联数据的主键,具体某一行的id(例如具体某一个帖子的id)object_id=models.PositiveSmallIntegerField()# GenericForeignKey字段创建,在数据库中不会存在该字段content_object=GenericForeignKey('content_type','object_id')

models.py

from django.shortcuts import render,HttpResponse
from app01 import models
from django.contrib.contenttypes.fields import ContentType
# Create your views here.
def Test(request):# 创建测试数据 方式一# content_type_pic_obj=ContentType.objects.filter(model='picture').first()# picture_obj=models.Picture.objects.filter(id=1).first()# models.Comment.objects.create(content='图片好看2',content_type=content_type_pic_obj,object_id=picture_obj.id)# models.Comment.objects.create(content='图片好看3',content_type=content_type_pic_obj,object_id=picture_obj.id)# models.Comment.objects.create(content='图片好看4',content_type=content_type_pic_obj,object_id=picture_obj.id)# content_type_post_obj = ContentType.objects.filter(model='post').first()# post_obj_1 = models.Post.objects.filter(title='散文1').first()# post_obj_2 = models.Post.objects.filter(title='散文2').first()# models.Comment.objects.create(content='散文写的好', content_type=content_type_post_obj, object_id=post_obj_1.id)# models.Comment.objects.create(content='散文写的好2', content_type=content_type_post_obj, object_id=post_obj_1.id)# models.Comment.objects.create(content='散文写的好3', content_type=content_type_post_obj, object_id=post_obj_2.id)# 创建测试数据方式二# picture_obj = models.Picture.objects.filter(image='default_avatar.jpg').first()# models.Comment.objects.create(content_object=picture_obj,content='图片一般般')# post_obj_1 = models.Post.objects.filter(title='散文1').first()# models.Comment.objects.create(content_object=post_obj_1, content='文章一般般')# 查询一个对象的所有评论comment_list=models.Post.objects.filter(id=1).first().comments.all()print(comment_list)return HttpResponse('...')

views.py

"""django_contenttypes编写models URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [path('admin/', admin.site.urls),path('test/', views.Test),
]

urls.py

转载于:https://www.cnblogs.com/zhaowei5/p/10446533.html

Django contenttypes组件相关推荐

  1. 路飞学城python全栈开发_python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)...

    昨日内容回顾 1. 为什么要做前后端分离?-前后端交给不同的人来编写,职责划分明确.-API (IOS,安卓,PC,微信小程序...)-vue.js等框架编写前端时,会比之前写jQuery更简单快捷. ...

  2. Django contenttypes 应用

    Django contenttypes 应用 contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中. 每当我们创建 ...

  3. 一篇文章浅析Django Form组件相关知识

    击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 灭烛怜光满,披衣觉露滋. 前言 在上 ...

  4. Django——stark组件

    stark组件是仿照django的admin模块开发的一套组件,它的作用是在网页上对注册的数据表进行增删改查操作. 一.配置 1.创建stark应用,在settings.py中注册stark应用 st ...

  5. markdownpad2 html渲染组件出错_Day68 Django forms组件

    目录 forms组件 forms组件类书写 forms组件如何校验数据 forms组件如何渲染标签 forms组件展示错误信息 forms组件钩子函数(HOOK) forms组件常见参数 forms组 ...

  6. Django ModelForm 组件的应用

    ModelForm组件的应用 ModelForm 组件的创建: 1.创建一个类,该类继承 forms.ModelForm  2.大致组成部分 class ModelNameModelForm(form ...

  7. Django 分页组件替换自定义分页

    Django的分页器(paginator) 总之不太好用我们还是用自己的好一些 自定义分页器 分页实现源码 """ 自定义分页组件 """c ...

  8. Django admin组件源码流程

    admin 组件 Django 自带的用户后台组件 用于用户便携的操作 admin 组件核心 启动 注册 设计url 启动核心代码 每个app 通过 apps.py 扫描 admin.py 文件 并执 ...

  9. Django分页组件

    """ 自定义分页组件de使用 实例: 1.视图函数中 def num_list(request):# 根据需要获取数据库的数据queryset = models.Pre ...

最新文章

  1. android 共享代码,Android团队成员间的代码共享!(Git+Github版)
  2. nacos集群的ap cp切换_配置中心Nacos
  3. 如何使用 git 更新branch到master最新状态
  4. 挣钱其实是一门学问也一个门道
  5. 7月25日训练赛签到题HDU1257
  6. android移动开发慕课版本_Android移动开发基础教程(慕课版)
  7. Clover 引导 Windows 及 Linux 双系统
  8. Windows下查看进程及结束进程命令
  9. 兄弟连Linux笔记
  10. 为知笔记打不开 ziw 文件问题
  11. numpy_subtract函数
  12. IDEA提交git代码,配置文件乱码
  13. 源发行版 8 需要目标发行版 1.8
  14. 2022年总结:道阻且长,行则将至
  15. 访问github网速慢问题
  16. 魂武者服务器维护,《魂武者》8月16日停机更新公告
  17. 农业计算机应用论文,计算机应用论文农业中计算机应用科技模式
  18. openssl 漏洞 修复 教程
  19. 长江流域土地利用与土地覆盖数据(1985-2020)
  20. “打死都千万不要进外包”,我在阿里外包测试的两年...

热门文章

  1. pytorch gather_【CV】10分钟理解Focal loss数学原理与Pytorch代码
  2. Windows Print Spooler 远程代码执行漏洞(CVE-2021-1675)
  3. SQLSERVER中SP_WHO2和INPUTBUFFER的用法
  4. h3c 华三路由器分类区别及命令配置笔记
  5. vue使用过程中的一些问题
  6. 知识分享:如何用插件实现操作校验
  7. C# 如何修改Form不能修改窗体大小
  8. [唐诗]183清平调词三首-李白
  9. Dropping Balls(小球下落)
  10. javascript 动态创建表格:新增、删除行和单元格