Django Model

今天晚上看了一下Django文档的model部分,简要翻译一下,以备后用:

 

原文地址:

http://docs.djangoproject.com/en/dev/topics/db/models/


定义一个Model


每一个model必须是django.db.models.Model的一个子类
每个字段被定义为一个类的属性,每个属性对应数据库表的一个字段

from django.db import models
class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

对应下面的sql:
CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);
 


默认情况下,Django会在model名的前面加上你的“应用的名称_”作为数据库表的名称。
比如你的应用是polls,定一个了一个model叫做Person,那么数据库表的名称是polls_person

默认情况下,Django汇给你自动增加一个叫做id的字段,并设置这个字段为主键。


使用Model

当定义了Model之后,你需要告诉Django去使用这些models,
修改settings.py中的INSTALLED_APPS属性,增加包含models.py的模块名称即可。


比如你的models.py文件的路径是 mysite.myapp.models.py那么只需要这样写即可:

INSTALLED_APPS = (
	#...
	'mysite.myapp',
	#...
)
 

注意:如果你在settings.py的INSTALLED_APPS中添加了新的app,需要重新运行manage.py syncdb命令



字段类型
在model中的每一个字段都必须是Field类的一个实例。Django使用字段类型确定下面几件事情:
1、数据库字段的类型
2、在admin界面中使用的html组建,比如是文本框,还是单选框等。
3、必填项验证。

字段选项
每一个字段都有一些参数,比如CharField字段有一个max-length的参数,表示字段类型的长度。

Django定义了一些所有字段(类)都有的公共的参数,下面简单的总结一下他们的使用:


null
如果是True,Django会在数据库中将此字段的值置为NULL,默认值是False

blank
如果是True,那么这个字段是可以不填的。默认是False

blank和null的区别:null纯粹是与数据库有关系的。而blank是与页面必填项验证有关的。
如果blank=False,那么这个字段就是必填的。

choices
An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this field. If this is given, Django's admin will use a select box instead of the standard text field and will limit choices to the choices given.

一个二维的元组被用作choices,如果这样定义,Django会select box代替普通的文本框,
并且限定choices的值是元组中的值

YEAR_IN_SCHOOL_CHOICES = (
    ('FR', 'Freshman'),
    ('SO', 'Sophomore'),
    ('JR', 'Junior'),
    ('SR', 'Senior'),
    ('GR', 'Graduate'),
)
 


default:
可以设置字段的默认值,它可以是一个普通的值,或者是一个可以调用(callable)的对象,如果是一个callable的对象,那么每次调用的时候都会创建一个新的对象。

primary_key:
如果是True,那么这个字段就是这个表的主键。

如果在model的字段上没有定义primary_key=True,那么Django会自动添加一个IntegerField(id)类型的字段,作为主键。所以一般情况下你不需要设置这个属性,除非你不想使用默认的设置。

unique
如果Ture,设定字段的值是唯一的。

Automatic primary key fields
默认情况下,Django会自动为每一个model定义如下字段:

 

id = models.AutoField(primary_key=True)
 


这是一个自增长的主键

你可以在任何一个字段上设置primary_key=True,如果Django发现你定义了这个属性,他就不会自动添加id字段了

Verbose field names
除了ForeignKey,ManyToManyField,OneToOneField外,每一个field类型的第一个参数,是一个可选参数-Verbose field names。如果没有这个参数,Django会自动的按照字段的名称创建一个。两个单词之间会用空格分割。

 

verbose name 是Person's first name

first_name = models.CharField("Person's first name", max_length=30)

 verbose name是 first name

first_name = models.CharField(max_length=30)
 

 

ForeignKey, ManyToManyField and OneToOneField 要求第一个字段必须是一个model class,所以你可以使用
关键字参数定义verbose name:

 

poll = models.ForeignKey(Poll, verbose_name="the related poll")
sites = models.ManyToManyField(Site, verbose_name="list of sites")
place = models.OneToOneField(Place, verbose_name="related place")

 


这里约定verbose name的第一个字母不要大写。Django会在需要的时候,自动转化为大写。

Relationships
Django定一个三种通用的类型,去描述数据库表之间的关系:
many-to-one, many-to-many and one-to-one.

Many-to-one relationships:

使用ForeignKey来定一个Many-to-one的关联关系。就像使用普通的Field一样。
ForeignKey的第一个参数必须定义这个model与哪一个model关联

比如,Car model有一个Manufacturer:一个制造厂(one)可以生产很多汽车(Many),但是一个汽车只能有一个制造厂

class Manufacturer(models.Model):
    # ...

class Car(models.Model):
    #一个汽车只能有一个制造厂
    manufacturer = models.ForeignKey(Manufacturer)
    # ...
 

 

未完待续......

Django—Model就是ORM的具体体现 这个例子表达了基本对应关系 class SideBar(models.Model): STATUS_SHOW = 1 STATUS_HIDE = 0 STATUS_ITEMS = ((STATUS_SHOW, "展示"), (STATUS_HIDE, "隐藏"),) SIDE_TYPE = ((1, "HTML"), (2, "最新文章"), (3, "最热文章... 阅读详情

相关推荐

ComfyUI的G-Dino模型加载器报错解决方案:从崩溃到重生

遇到G-Dino模型加载器报错不要慌,按照本文的步骤操作,99%的问题都能解决。模型文件正确下载到指定位置segment_anything节点安装完整且无冲突需要补充更多细节或故障排除方法吗?可以随时告诉我。

2301_78150483的博客 4023

Django 模型(model)

在当代 Web 应用中,主观逻辑经常牵涉到与数据库的交互。数据库驱动网站在后台连接数据库服务器,从中取出一些数据,然后在 Web 页面用漂亮的格式展示这些数据。

Linxiaokang_1212的博客 8071

Cisco Packet Tracer 7.3免登录技巧:3种方法快速跳过注册界面(附详细截图)

本文针对Cisco Packet Tracer 7.3启动时遇到的登录界面问题,提供了三种合法高效的解决方案。详细介绍了如何利用官方访客模式快速启动、注册思科账号实现一劳永逸登录,以及通过调整本地安装配置优化启动流程,帮助网络学习者与备考者绕过繁琐步骤,快速进入实验环境。

weixin_29305337的博客 739

3、Django开发总结:Model模型的介绍、字段属性、字段选项(参数)与设计详解

Model (模型) 简而言之即数据模型。模型不是数据本身(比如数据库里的数据),而是抽象的描述数据的构成和逻辑关系。每个Django model实际上是个类,继承了models.Model。每个Model应该包括属性,关系(比如单对单,单对多和多对多)和方法。当定义好Model模型后,Django的接口会自动在数据库生成相应的数据表(table)。这样就不用自己用SQL语言创建表格或在数据库里操作创建表格了。

SteveRocket's-Blog 4166

AI 代码赋能短视频带货:服装及多赛道批量内容生产全流程实操

本文聚焦 AI 技术在短视频带货领域的落地应用,以服装赛道为核心,延伸至花卉绿植、图书、茶具等热门领域,系统拆解 AI 工具在选品、素材处理、视频制作(含动态效果、场景搭建)、运营优化等环节的实操方法。针对从业者普遍面临的 “内容生产低效”“无专业技术难出优质视频”“流量运营踩坑” 等痛点,提供从基础工具使用到高阶视频制作的全流程技术方案,助力相关从业者借助 AI 实现批量、高效的短视频内容产出。

m0_67958922的博客 3083

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1164

【Python技术学习】- Django之模型类Model 进阶学习

在前面的第三天的学习中,我们了解到了 ORM,也学会了模型类的简单设计和表的生成,同时也学会了如何去操作数据表以及相关的查询。之所以写这篇文章是为了将 Model 模型类讲的更加的详细。当前选择的数据库支持字段的类型渲染管理表单时使用的默认 html 控件在管理站点最低限度的验证django 会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后 django 不会再创建自动增长的主键列。

xiaoli8748的专栏 2091

保姆级教程:在Linux上用IGH EtherCAT主站搞定从站时钟同步(附sync_datagram报文详解)

本文详细介绍了在Linux系统上使用IGH EtherCAT主站实现从站时钟同步的保姆级教程,重点解析了sync_datagram报文的结构和工作原理。通过实战案例和代码示例,帮助开发者掌握微秒级同步精度的实现方法,适用于工业自动化领域的高精度设备协同控制。

weixin_30733003的博客 260

Django 组件之 Model

1.2 Model 验证和错误提示 Model 中验证和错误提示有两种方式: Model 字段验证: 3. 多表关系及参数 一对一:Foreignkey 基础上加一个唯一索引 unique 一对多:ForeignKey 多对多:ManyToMany(两个一对多,两个 ForeignKey 相连) 3.1 一对多模型 一对多模型,如:员工部门表,一个部门可以有多个员工。那么 Django 怎么建立这种关系呢?其实就是通过外键 进行关联,在多的一方,字段指定外键即可。ForeignKey 字段参数

hj1993的博客 1288

【03】海康MVS V4.3.0 ——安装教程、查看示例、库、头文件、开发指南

海康威视MVS机器视觉软件安装与使用指南:首先从官网下载MVS 4.3.0安装包,默认设置完成安装。安装后可在Development目录查看示例代码、开发文档及头文件,支持C++/C#/Python等多语言开发。软件内置虚拟相机功能,通过工具菜单添加虚拟设备后即可模拟真实相机操作,支持中英文界面切换、参数调节(曝光/增益等)及图像采集功能。虚拟相机虽仅能显示预设图像,但完整保留了参数调节功能,适合开发者进行功能测试。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3306

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文及其开源代码来串一串这方面的知识。这个很好理解,参考FPointNet网络图示。就是利用现有的2D检测器在图像上提取2D初始框,根据Camera成像原理,捕获2D框视锥内的点云,再利用点云分类模型(如:PointNet)做进一步分类。

4961

Django系列教程(5)——Django模型详解

假设你要开发一个名叫bookstore的应用,专门来管理书店里的书籍。我们首先要为书本和出版社创建模型。出版社有名字和地址。书有名字,描述和添加日期。我们还需要利用ForeignKey定义了出版社与书本之间单对多的关系,因为一个出版社可以出版很多书,每本书都有对应的出版社。我们定义了Publisher和Book模型,它们都继承了。你能看出代码有什么问题吗?模型创建好后,当你运行CharField里的max_length选项没有定义里的on_delete选项有没有定义。

彩蛋在每篇文章的最后名片 2022

LIS3DHTR三轴加速度计Arduino驱动与嵌入式集成指南

加速度计是嵌入式系统中实现运动感知、姿态解算和振动分析的核心传感器。其工作原理基于MEMS微机械结构在惯性力作用下的电容变化,经片内ADC转换为数字信号;I²C接口因其硬件资源占用少、布线简洁,成为低功耗物联网节点的主流通信方式。技术价值体现在高分辨率(12位)、多量程(±2g~±16g)与低功耗(待机电流仅2µA)的平衡,支撑电池供电设备长期运行。典型应用场景包括可穿戴设备的姿态识别、工业预测性维护中的振动监测,以及智能硬件的敲击/跌落检测。本文围绕LIS3DHTR芯片及其Grove模块,详解Arduin

weixin_42584758的博客 594

django中通过model名字获取model

django1.6, 通过字符串和get_app、get_model获得对应的object 只需要两行代码: from django.db.models import get_model get_model('auth', 'User') 下面是详细的过程展示: >>> from django.db.models import get_app, get_models,...

amo16617的博客 2140

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Django Model设计详解

Django Model 设计 如果图片不加载,请访问 GitHub链接 Django Model设计是Django五项基础核心设计之一(Model设计,URL配置,View编写,Template设计,From使用),也是MVC模式中重要的环节。 Model是数据模型,并不是数据库,它描述了数据的构成和他们之间的逻辑关系,在Django中,Model设计实质上就是一个类,所以我们可以直接站在类的角...

面向对象的笔记 3844

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

django model

本文一篇完全介绍django的最重要的model 6.django model 模型是数据唯一而且准确的信息来源。它包含正在储存的数据的重要字段和行为。一般来说,每一个模型都映射一个数据库表。 这个模型定义了一个 Person, 其拥有 first_name 和 last_name: from django.db import modelsclass Pe...

微信号:RunsenLiu 1801

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

django创建model模型

创建model 在使用django时,我们并不是直接进入mysql去修改数据库数据,而是在model中通过python语言映射成sql语言对mysql进行操作 我们可以自己创建一个model,也可以使用django自带的model,但是使用自带的model时注意要在settings文件下注册这个model 首先创建一个自定义的model class UserInfo(models.Model): ...

lvbu89757的博客 841

Django Model 详解

Django基础——Model篇(一)     到目前为止,当程序涉及到数据库相关操作时,我们一般都会这么操作:     (1)创建数据库,设计表结构和字段     (2)使用MySQLdb来连接数据库,并编写数据访问层代码     (3)业务逻辑层去调用数据访问层,执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb...

qq_38059635的博客 1万+

Django动态添加model

目的:在数据库中动态添加表环境:django-1.2, mysql-5.1.47代码:dynamic_model.py# -*- coding: utf-8 -*- from django.db import models def create_model(name, fields=None, app_label='', module='', options=None, admin=None): class Meta: # Using type('Meta', ...) gi

siete's blog 5525

Django的Model

整理记录一下Django的Model相关内容,工作中实际用到的点其实不是非常多,但是可以对于Model的一些特性做一些记录,也许长久会发现一些比较好的方式来做同样的事情。 一、Basic: 1、每个model 是  django.db.models.Model  的子类 来自 https://docs.djangoproject.com/en/1.11/topics/db/models

qq_15297487的博客 685

Django model update的各种用法介绍

Django开发过程中对表(model)的增删改查是最常用的功能之一,本文介绍笔者在使用model update过程中遇到的那些事 model update常规用法 假如我们的表结构是这样的 那么我们修改用户名和状态可以使用如下两种方法: 方法一: User.objects.filter(id=1).update(username='nick',is_active=True) ...

python学习者的博客 1万+

Django Model Report 使用教程

Django Model Report 使用教程 1. 项目介绍 django-model-report 是一个 Django 应用程序和库,用于生成与 Highcharts 集成的报告。该项目由 juanpex 维护,旨在帮助开发者快速生成基于 Django 模型的报告,并通过 Highcharts 进行可视化展示。 主要功能 报告生成:基于 Django 模型生成报告。 Highcharts...

gitblog_00397的博客 1025

django Model field

django Model field字段选项通用参数blanknullchoicesdb_columndb_indexdb_tablespacedefaulteditableerror_messageshelp_textprimary_keyuniqueunique_for_dateunique_for_monthunique_for_yearverbose_namevalidatorsRegis...

灵动的艺术的博客 2201

Django Model 字段部分详解

Django提供了一个抽象层(“Model”)来构建和管理Web应用程序的数据。 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表。 关系对象映射(Object Relational Mapping,简称ORM)。 1. 创建表 a、基本结构 from django.db import models  class userinfo(m...

bbsddn的博客 297

【转载】django 对于外部文件调用model 对象

1.对于外部文件直接调用 model 对象的话,会直接报如下错误: django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANG...

qq_34309753的博客 1649

从 0 参与 REA:逆向工程 Agent 的完整贡献流程

REA 是一套让 AI 代理完成逆向工程的开源工具,它用同一套 MCP 工具和 CLI,把 Hopper、Ghidra、IDA、浏览器、.NET 等分析能力接给代理,分析在本地运行,每条结论都附带证据与局限。读完这篇,你能回答四件事:我能贡献什么、本地怎么起步、我的改动如何被验证、改动如何提交与求助。全文不假设你读过源码,跟着命令走即可。 ## 🧭 先挑一个够得着的入口:你能贡献什么 参与

gitblog_00005的博客 507
上一篇: 如何删除Django
下一篇: 影响程序性能的主要因素
hcom
博客等级 码龄22年 14粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值