django入门-模型-part2
尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6511177.html
完全翻译自官方文档 https://docs.djangoproject.com/en/1.10/intro/tutorial02/
这章讲数据库相关
在settings.py的数据库配置中默认是使用sqllite,如果只是用来练手那么你不用修改数据库的配置
# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
如果要用mysql,就是下面的配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test', # 数据库名称
'USER': 'root',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
}
}
别忘了修改下配置文件的时区和语言
LANGUAGE_CODE = 'zh-hans' # django 1.10种要用zh-hans,如果用zh-cn会报错 TIME_ZONE = 'Asia/Shanghai'
django默认加载的apps(settings.py中的INSTALLED_APPS)需要用到数据库,下面我们先创建需要用的库和表
python manage.py migrate
下面在应用中创建数据库模型 polls/models.py
from django.db import models class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published') class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
django支持数据库的外键: 多对一,多对多,一对一
关于Field的具体内容请参考 https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.Field
要是我们的model被django发现,需要在INSTALLED_APPS中添加我们的应用
INSTALLED_APPS = [
'pools',
'suit',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
suit这个应用是django admin的一个扩展,可以让django的admin界面更好看,推荐!!!
下面有几个命令要说明一下
python manage.py makemigrations polls #在本地生成一个文件 ,记录你的model的变动 python manage.py sqlmigrate polls 0001 # 详细显示出django根据这次修改的model.py文件 实际要做的事,它只是打印一下内容,而不会实际去修改数据库 python manage.py migrate # 运行这个命令,你的数据库就根据你的models.py完成修改了 python manager.py check # 检查你的model.py
如果你要修改你的模型models.py 记住3个步骤
1. 修改你的models.py
2. 执行 python manage.py makemigrations
3. python manage.py migrate 应用修改
最好为你的每个模型添加__str__()方法,这会让你的模型的输出更加友好
不然可能是这样的输出
>>> Question.objects.all()
<QuerySet [<Question: Question object>]>
所以请添加__str__()方法
from django.db import models
from django.utils.encoding import python_2_unicode_compatible @python_2_unicode_compatible # 兼容python2
class Question(models.Model):
# ...
def __str__(self):
return self.question_text @python_2_unicode_compatible
class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text
然后它会这么显示
# Make sure our __str__() addition worked.
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>
django自带管理后台,可以方便的查看和修改数据库内容
我们先创建后台界面的管理员账户
python manage.py createsuperuser #根据提示输入用户名,邮箱,密码
现在可以访问后台界面了 http://127.0.0.1:8000/admin/
如果你想通过后台展示你的模型,修改应用里的admin.py
from django.contrib import admin from .models import Question admin.site.register(Question)
本节完
django入门-模型-part2的更多相关文章
- Django入门--模型系统(一):模型基础
1.Django的ORM介绍 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不 ...
- Django入门--模型系统(二):常用查询及表关系的实现
1.常用查询 模型类上的管理器: ** 模型类.objects ** (1)常用一般查询 rs = Student.objects.all() # 查询所有记录,返回Queryset print(rs ...
- Django 入门
Django 入门 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模型,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容 ...
- Django入门笔记
Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有 ...
- Django入门与实践 17-26章总结
Django入门与实践-第17章:保护视图 Django 有一个内置的视图装饰器 来避免它被未登录的用户访问: 现在如果用户没有登录,将被重定向到登录页面: 现在尝试登录,登录成功后,应用程序会跳转到 ...
- Django 入门项目案例开发(上)
关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. Django 入门案例开发(中) http://www.cnblogs.com/focusBI ...
- Django 入门案例开发
Django是一个重量级的web开发框架,它提供了很多内部已开发好的插件供我们使用:这里不去描述 Django直接进入开发过程. Django入门案例分两部分:一.开发环境的配置:二.业务需求分析. ...
- python web框架Django入门
Django 简介 背景及介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以 ...
- Django入门第一步:构建一个简单的Django项目
Django入门第一步:构建一个简单的Django项目 1.简介 Django是一个功能完备的Python Web框架,可用于构建复杂的Web应用程序.在本文中,将通过示例跳入并学习Django.您将 ...
随机推荐
- dubbo 提供者 ip不对
1.服务器多网卡绑定,导致服务起来后程序自己选择的ip不对. 2.提供服务的机器开启了vpn. 3.dubbo配置文件中写死了host. 以下为转载:转自http://www.ithao123.cn/ ...
- 721. Accounts Merge合并电子邮件账户
[抄题]: Given a list accounts, each element accounts[i] is a list of strings, where the first element ...
- php多进程pcntl学习(二)
多进程中数据独立,变量无法共享,所以可以使用shmop共享内存实现(cli模式不支持APC扩展),或者存储到redis这种nosql中. 下面实例,开10个进程结合redis集合,做一些简单的任务处理 ...
- php解决时间超过2038年
问题 超过2038年的时间 php怎么处理? echo date('Y-m-d',2147483647); //date函数能处理的最大整数2147483647 ->2038-01-19 就是2 ...
- JavaScript Math.floor() 方法
定义和用法: floor() 方法可对一个数进行下舍入. 语法: Math.floor(x); x:必须参数,可以是任意数值或表达式: 返回值: 小于等于 x,且与 x 最接近的整数. 说明: flo ...
- 删除重复记录的最新sql脚本
delete from tb1 where id in(select t2.minnum from(select MIN(t1.id) as minnum,t1.col1 as ars ,COUN ...
- 08 Translating RNA into Protein
Problem The 20 commonly occurring amino acids are abbreviated by using 20 letters from the English a ...
- .NET基础 (15)委托
委托1 请解释委托的基本原理2 委托回调静态方法和实例方法有何区别3 什么是链式委托4 链式委托的执行顺序是怎么样的5 可否定义拥有返回值的方法的委托链6 委托通常可以应用在哪些场合 委托1 请解释委 ...
- struts2 入门程序
1.struts 2.5.2 基本jar包 2.web.xml <!-- Filters --> <!-- START SNIPPET: filter --> <filt ...
- 企业搜索引擎开发之连接器connector(二十)
连接器里面衔接数据源与数据推送对象的是QueryTraverser类对象,该类实现了Traverser接口 /** * Interface presented by a Traverser. Used ...