Django后台管理复杂模型

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客

《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)

Django框架创建后台管理员账户-CSDN博客

在Django后台管理模块中,使用admin.site.register()注册方式还可以管理更加复杂的自定义模型。下面,我们在7.3节实例的基础上稍加修改,完成一个复杂模型的后台管理(Admin)应用测试。

首先,在userinfo应用下新创建一个模型Dep,仅包括一个简单的名称(name)字段。然后,修改一下模型Person,新建一个模型Dep的外键(dep)字段,具体代码如下:

【代码7-3】(详见源代码MyAdminSite项目的userinfo/models.py文件)

01  from django.db import models
02  
03  # 在此处创建模型
04  
05  # Model Dep(Department)
06  class Dep(models.Model):
07      name = models.CharField(max_length=16)
08  
09      def __str__(self):
10          return self.name
11  
12  # Model Person
13  class Person(models.Model):
14      name = models.CharField(max_length=32)
15      age = models.IntegerField(default=0)
16      dep = models.ForeignKey(Dep, on_delete=models.CASCADE,)
17  
18      def __str__(self):
19          return self.name

【代码分析】

在第01行代码中,通过import关键字引入models模块。

在第06~10行代码中,创建了一个模型Dep,继承自models.Model模型类,详细说明如下:

  • 在第07行代码中,创建了一个CharField类型的name字段属性。

在第13~19行代码中,创建了一个模型Person,继承自models.Model模型类,详细说明如下:

  • 在第14行代码中,创建了一个CharField类型的name字段属性。
  • 在第15行代码中,创建了一个IntegerField类型的age字段属性,默认值为0。
  • 在第16行代码中,创建了一个ForeignKey外键,外键类型定义为模型(Dep)。注意,on_delete属性必须定义,这是Django 3.0+版本新增的规范。

通过后台管理界面管理该复杂模型,还是要使用admin.site.register()方法将数据模型注册到后台管理模块中,具体代码如下:

【代码7-4】(详见源代码MyAdminSite项目的userinfo/admin.py文件)

01  from django.contrib import admin
02  from .models import Dep, Person
03  
04  # 在此处注册模型
05  admin.site.register([Dep, Person])

【代码分析】

在第01行代码中,通过import关键字引入admin模块。

在第02行代码中,通过import关键字从模型中引入了Dep和Person模型。

在第05行代码中,通过调用admin.site.register()方法同时完成将Dep和Person模型注册到后台管理模块的操作。

最后,刷新一下浏览器中的后台管理界面,具体页面效果如图7.10所示,后台管理模块界面中添加了刚刚创建的模型Dep。

图7.10  管理复杂模型

为了更好地演示界面效果,可以通过Python交互界面在模型Dep和模型Person中添加一些用户数据,具体代码如下:

>>>from userinfo.models import Dep, Person
>>>dep=Dep(name=’IT’)
>>>dep.save()
>>>p=Person(name=’cici’,age=7,dep=dep)
>>>p.save()

返回图7.10中的Dep和Person模型,分别单击该链接会跳转到相应数据表的可编辑页面,效果如图7.11和图7.12所示,刚刚添加的用户数据已经在页面上显示出来了。

我们可以尝试单击图7.12中的用户信息cici链接,会跳转到该条用户信息的可编辑页面。效果如图7.13中的箭头和标识所示,在该条Person模型的用户信息中,可以清楚地查看到Dep模型类型的外键。

图7.11  Dep模型可编辑页面效果

图7.12  Person模型可编辑页面效果

图7.13  用户信息可编辑页面效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143064.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ZLMediaKit Windows编译以及使用

1.运行ZLMediaKit 2.通过ffmpeg把视频源推流给ZLMediaKit 执行以下命令,将本地视频通过RTSP协议推流给ZLMediaKit。 ffmpeg -re -stream_loop -1 -i "D:\workplace\armgb\public\1.fileh264" -vcodec h264 -f rtsp rtsp://127.0.0.1/live/test 若想将本…

统信服务器操作系统【d版系统上Ansible工具】配置方法

在统信服务器操作系统d版本上进行安装Ansible工具的方法以及配置方法。 文章目录 准备环境功能描述安装与配置一、 安装ansible工具1. 直接 命令安装2. 验证安装结果3. 配置ssh免密登录二、Ansible使用1. 主机清单配置2. ansible命令3. ansible模块三、 playbook配置文件1. 执行…

Java 发布jar包到maven中央仓库(2024年9月保姆级教程)

文章目录 前言一、账号准备1. 注册登录账号2. 新建命名空间3. 验证命名空间4. 生成令牌5. 为 maven 设置令牌二、GPG准备1. 下载GPG2. 发布证书2.1 新建证书2.2 发布证书到服务器2.3 验证发布三、发布jar包到中央仓库1. 编辑项目pom文件2. 打包上传3. 发布jar包4. 搜索我们的ja…

【机器学习】任务五:葡萄酒和鸢尾花数据集分类任务

目录 1.实验基础知识 1.1 集成学习 (1)随机森林 (2)梯度提升决策树(GBDT) (3)XGBoost (4)LightGBM 1.2 参数优化 (1)网格搜索…

Java面试篇基础部分-Java线程池工作原理

线程池的出现,主要是用来管理一组线程的工作运行状态,这样可以方便JVM更好的利用CPU资源。 Java线程池的工作原理:JVM先根据用户的参数创建一定数量的可运行的线程任务,并且将这些任务放入到队列中,在线程创建之后,启动这些任务。 如果当线程数超过最大线程数,这个线程数…

WIFI路由器的套杆天线简谈

❝本次推文简单介绍下WIFI路由器的套杆天线。 路由器天线 路由器在这个万物互联的时代,想必大家对其都不陌生。随着科技的发展,常用的路由器上的天线也越来越多,那么问题来了:天线越多,信号越好吗?路由器…

视频转文字工具:开启视频内容深度挖掘的钥匙

图片里到文字要提取出来,现在有很多的工具,但是视频里的文字要提取出来,是不是就不那么好操作呢?并不是的,现在也有不少支持视频转文字的工具,这次我们就来介绍一些可以提高我们视频文字提取效率的工具吧。…

【CSS in Depth 2 精译_033】5.4 Grid 网格布局的显示网格与隐式网格(中)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

[Redis][环境配置]详细讲解

目录 1.安装 && 简单配置2.文件目录说明3.客户端 1.安装 && 简单配置 Ubuntu下,直接使用sudo apt install redis -y即可支持远程连接:修改/etc/redis/redis.conf 将bind 127.0.0.1改为bing 0.0.0.0作为学习用途,可以将prote…

代码——IMX6UL烧录工具及其使用

一、简介 在此感谢正点原子官方提供的IMX6UL烧录代码,本篇是在正点原子给的代码基础上修改的,增加了些许功能,可根据自己的需求更改。此外代码难免有疏漏之处,还望见谅 二、源代码的使用 1,库和工具的安装 安装库和工具前&#x…

Datawhale X 南瓜书 task01学习笔记

机器学习三观 机器学习工程领先理论 what:什么是机器学习? 机器学习定义:研究关于“学习算法”(一类能从数据中学习出其背后潜在规律的算法)的一门学科PS:深度学习指的是:神经网络那一类学习算法,因此是机器学习的子集把深度学习单列出来…

idea连接docker 自动化部署

进入Linux服务器 vim /lib/systemd/system/docker.service将 ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock 替换为 ExecStart/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock新建文件 Dockerfile配置Dockerfile文…

Linux下rpm方式部署mysql(国产化生产环境无联网服务器部署实操)

请放心观看,已在正式环境部署验证,流程无问题! 所用系统为国产化麒麟银河 aarch64系统,部署时间2024年9月份! #查看服务器信息 #涉及生产服务器,所以输出信息隐藏了一部分[rootecs-xxxxx hdata]# uname -…

Java 中常用的排序算法

Java 中常用的排序算法有很多,每种算法的时间复杂度和适用场景都不同。以下是几种常见的排序算法及其 Java 实现和讲解: 1. 冒泡排序 (Bubble Sort) 算法思路: 重复地遍历数组,每次比较相邻两个元素。如果前一个比后一个大&…

性能测试笔记

一、性能测试介绍 1.概述 性能测试时通过工具/代码模拟正常/峰值/异常的负载条件,对系统的各项性能指标进行测试和评估的过程 本阶段的学习范围是服务端的性能测试,不包括客户端性能 测试目的 评估当前系统能力,如:新出的手机都…

新书速览|NestJS全栈开发解析:快速上手与实践

《NestJS全栈开发解析:快速上手与实践》 本书内容 《NestJS全栈开发解析:快速上手与实践》旨在帮助读者快速掌握NestJS(简称Nest)开发,并应用于实战项目。本书共10章,首先介绍基本概念,为读者打下坚实的知识基础。接着…

chapter15-泛型——(泛型语法)——day20

目录 554-泛型引入 555-泛型入门 556-泛型入门 557-泛型应用实例 558/9-泛型使用细节 560-泛型课堂练习 554-泛型引入 555-泛型入门 556-泛型入门 泛型先泛再型 557-泛型应用实例 泛型一旦指定了,编译器就会按照指定来约束传入类型 558/9-泛型使用细节 560-泛…

算法训练——day15数组交集(是否去重)

349. 两个数组的交集 给定两个数组 nums1 和 nums2 ,返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2]示例 2: 输入…

Java SE基础知识详解:源于技术书籍的深度解读

写在前面 ⭐️在无数次的复习巩固中,我逐渐意识到一个问题:面对同样的面试题目,不同的资料来源往往给出了五花八门的解释,这不仅增加了学习的难度,还容易导致概念上的混淆。特别是当这些信息来自不同博主的文章或是视…

【C语言零基础入门篇 - 9】:文件操作

文章目录 文件操作文件的简介指向指针的文件文件的打开方式字符的读取和存储数据的读取和存储 文件操作 文件的简介 一、什么是文件? 文件有不同的类型,主要有两种文件: (1)程序文件。(2)数据…