python测试开发django-31.admin后台一对多关系

前言

平常的网页上有很多一对多的场景,比如填写银行卡信息的时候,会从银行列表下拉框选择对应的银行信息。一般会建两张表,一张表放银行的信息,一张表放银行卡信息。
每个银行可以对应多个银行卡,每个银行卡只能是一家银行的。那么银行名称和银行卡就是一对多的关系,反之,银行卡和银行名称就是多对一的关系

一对多表设计

准备两张表,银行信息(Bank)和卡号信息(CardInfo)
ForeignKey(外键)里面有2个必传参数,第一个参数(to)是关联到对应的表(Bank),第二个参数的on_delete指的是通过ForeignKey连接起来的对象被删除后,当前字段怎么变化。
常见的选项有:

  • models.CASCADE,对象删除后,包含ForeignKey的字段也会被删除

  • models.PROTECT,删除时会引起ProtectedError

  • models.SET_NULL,注意只有当当前字段设置null设置为True才有效,此情况会将ForeignKey字段设置为null

  • models.SET_DEFAULT ,同样,当前字段设置了default才有效,此情况会将ForeignKey 字段设置为default 值

  • moels.SET,此时需要指定set的值

  • models.DO_NOTHING ,什么也不做

# models.py

from django.db import models

# Create your models here.
class Bank(models.Model):
'''银行信息'''
bank_name = models.CharField(max_length=50, verbose_name="银行名称")
city = models.CharField(max_length=30, verbose_name="城市")
point = models.CharField(max_length=60, verbose_name="网点")

class Meta:
verbose_name_plural = '银行卡'

def __str__(self):
return self.bank_name

class CardInfo(models.Model):
'''卡信息'''
card_id = models.CharField(max_length=30, verbose_name="卡号")
card_name = models.CharField(max_length=10, verbose_name="姓名")
info = models.ForeignKey(Bank, on_delete=models.CASCADE, verbose_name="选择银行")
class Meta:
verbose_name_plural = '卡号信息'

def __str__(self):
return self.card_id

admin.py设置后台页面显示详情

# admin.py
from django.contrib import admin
from hello import models

# Register your models here.

class ControlBank(admin.ModelAdmin):
# 显示的字段
list_display = ["bank_name", "city", "point"]

class ControlCardInfo(admin.ModelAdmin):
# 显示的字段
list_display = ["card_id", "card_name", "info"]

admin.site.register(models.Bank, ControlBank)
admin.site.register(models.CardInfo, ControlCardInfo)

表设计好之后执行下面两句

makemigrations会在当前目录下生成一个migrations文件夹,该文件夹的内容就是数据库要执行的内容

python manage.py makemigrations

migrate就是执行之前生成的migrations文件,这一步才是操作数据库的一步

python manage.py migrate

admin后台页面

打开后台管理,进入Bank(银行卡)编辑界面,新增几个银行卡信息

再打开Card info(卡号信息),新增银行卡号信息,选择银行卡,只能是单选了,会自动关联前面添加的银行名称

新增成功后查看对应数据库里面数据

cardinfo表里面有个info_id字段会自动关联到bank表里面的id

2019年《python3接口自动化》课程3月17-4月14开课

主讲老师:上海-悠悠

上课方式:QQ群视频在线教学

上课时间:每周六、周日晚上20:30-22:30

报名费:1000

(0)

相关推荐

  • Django的开发流程与数据库设计

    引言:项目开发流程: 需求分析(成员:架构师 .产品经理 .开发者组长) 在跟客户谈需求之前,会大致先了解客户的需求,然后自己先设计一套比较好写的方案.跟客户沟通交流中引导客户往我们之前想好的方案上面 ...

  • 手把手教你用Django执行原生SQL

     来自:Python爬虫与数据挖掘  前言 Hey,各位小伙伴,这次怎么来玩一下,如何使用Django执行原生SQL. 我们都知道,Python在web界的扛把子--Django,可谓是集大成为统一, ...

  • python测试开发django-34.xadmin管理后台

    前言 django自带的admin后台管理页面有点丑陋,于是网上的大神优化了一版后台管理xadmin,并且开源了,在github开源下载到源码. 注意环境搭配: django  2.1.2 xadmi ...

  • python测试开发django -140.Bootstrap 缩略图

    前言 网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 class .thumbnail 的& ...

  • python测试开发django -143.Bootstrap 表单控件校验状态

    前言 Bootstrap 对表单控件的校验状态,如 error.warning 和 success 状态,都定义了样式.使用时,添加 .has-warning..has-error 或 .has-su ...

  • python测试开发django -142.Bootstrap 表单(form)

    前言 HTML 表单用于收集不同类型的用户输入.boostrap中表单有几种样式 基本垂直表单 内联表单 form-inline 水平排列表单 form-horizontal 基本表单实例 单独的表单 ...

  • python测试开发django -141.Bootstrap 面板(Panels)

    # 前言 面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 元素添加 class .panel 和 class .panel-default 即可 基础面板 不带标题的基本面 ...

  • python测试开发django -144.Ace Editor 在线编辑python代码

    前言 网页上想在线编辑代码,可以使用Ace Editor 在线编辑实现.比如我们想实现一个功能,在网页版上写python代码,能有python的语法自动补齐功能. Ace Editor 在线编辑 AC ...

  • python测试开发django-17.admin后台管理

    前言 通常一个网站开发,需要有个后台管理功能,比如用后台管理发布文章,添加用户之类的操作.django的admin后台管理主要可以实现以下功能 基于admin模块,可以实现类似数据库客户端的功能,对数 ...

  • python测试开发django-19.admin后台自定义显示

    前言 django的admin后台默认显示的内容很少,只显示了表的相关信息,查看字段内容需点开详情才能查看,不是很直观. 在admin.py文件里面是可以自定义相关的展示内容的,也可以添加搜索框,快速 ...

  • python测试开发django-21.admin后台表名称和字段显示中文

    前言 admin后台页面表名称(默认会多加一个s)和字段名称是直接显示在后台的,如果我们想设置成中文显示需加verbose_name和verbose_name_plural属性 verbose_nam ...