Model 的使用
1. 设计数据结构
问题表Question:作用存放问题
id 主键 自增
question_text 题目 varchar120
created 创建时间 datetime
选项表Choice:作用 存放选项
id 主键 自增
question 外键 问题表
choice_text varchar120
vote int default=0
2. 编写model代码
打开polls/models.py, 编写如下代码
# 问题模型 class Question(models.Model): question_text = models.CharField("题目", max_length=120) created = models.DateTimeField("创建时间", auto_created=True, null=True) # 选项模型 class Choice(models.Model): question=models.ForeignKey(Question,verbose_name=”题目", on_delete=models.CASCADE) choice_text = models.CharField("选项", max_length=120) vote = models.PositiveIntegerField("投票数", default=0)
3. 根据模型,生成数据库中的表
激活/注册你的应用polls
打开mysite/settings.py,找到InstalledApps
INSTALLED_APPS = [ 'django.contrib.admin', ……… # 自己编写的应用 'polls.apps.PollsConfig', # 第三方应用 ]
迁移
将我们的模型的生成或者变动,形成一个脚本,通过运行这个脚本,生成数据库中的表
需要控制台【Terminal】执行两条命令
python manage.py makemigrations #创建迁移脚本
python manage.py migrate #执行迁移 生成数据库中的表
4. 使用model API
创建一个Question
在控制台执行
q=Question.objects.create(question_text=”世界上最好的编程语言是?”)
获取一条Question数据
q1 = Quesiotn.objects.get(pk=1)
获取全部Question数据
q2=Question.objects.all()
打印获取的数据
q1. question_text
1.为model添加实例方法
def __str__(self):
return self.question_text
管理后台的使用
1. 创建管理员账号
在控制台输入如下命令:
python manage.py createsuperuser
2. 向管理后台注册应用
打开polls/admin.py文件
加入如下代码
from polls.models import Question
admin.site.register(Question)
3. 运行服务,访问管理员站点
python manage.py runserver
访问 127.0.0.1:8000/admin
使用注册的超级用户的账号密码登录即可
3.1针对多对一关系的管理页面
from django.contrib import admin from polls.models import Question, Choice # 针对多对一中 多的一方,可以让它继承 TabularInline类,作为 “一”的一方 管理界面的嵌入 class ChoiceInlineAdmin(admin.TabularInline): model = Choice # 配置Question的管理界面 class QuestionAdmin(admin.ModelAdmin): #配置QUestion的外键的内嵌界面 inlines = [ChoiceInlineAdmin, ] #把模型和配置类注册到一起 admin.site.register(Question, QuestionAdmin)
模版Template的使用
1.创建模板文件
1.1 集中在项目中
创建mysite/templates/polls 文件夹
1.2分散在应用中
创建polls/templates/polls
1.3生成文件
在polls/templates/polls文件夹创建一个文件 index.html
创建的templates文件夹(模板文件夹)需要settings.py 文件中配置
如:
# 用来配置项目的模板
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates"),], # 模板文件夹的路径
'APP_DIRS': True, # 可以再创建一个模板文件夹
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
2. 编写模板文件
{% for obj in question_list%} <li>{{obj.question_text}}</li> {% endfor%}
3. 重新编写views中的index方法
打开polls/views文件,把index方法改为:
def index(request):
#获取Question表中所有数据
question_list = Question.objects.all()
#上下文
template = loader.get_template("polls/index.html")
#渲染html
return (template.render({'question_list': question_list}, request))
该方法 将字典({'question_list': question_list} 传到"polls/index.html" 模板中,进行渲染,把渲染后的结果发给浏览器
4. 提交响应的简便方法
def index(request): # question_list中存放数据库中查询的数据 question_list = Question.objects.all() # 上下文 填充 模板中的数据 context = {'question_list': question_list} # 将模板和上下文 进行组装, 渲染之后返回给浏览器 return render(request, "polls/index.html", context)
Model 的使用的更多相关文章
- Spring Boot笔记一
Spring Boot 入门 Spring Boot 简介 > 简化Spring应用开发的一个框架:> 整个Spring技术栈的一个大整合:> J2EE开发的一站式解决方案: 微服务 ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- 详解树莓派Model B+控制蜂鸣器演奏乐曲
步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这里将用GPIO的PWM接口驱动无源蜂鸣器弹奏乐曲,本文基于树莓派Mode B+,其他版本树莓派实现时需参照相关资料进行修改! 1 预备知识 1.1 ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(上)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?
写在前面 除了博文内容之外,和 netfocus 兄的讨论,也可以让你学到很多(至少我是这样),不要错过哦. 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领 ...
- 使用mybatis-generator在自动生成Model类和Mapper文件
使用mybatis-generator插件可以很轻松的实现mybatis的逆向工程,即,能通过表结构自动生成对应的java类及mapper文件,可以大大提高工作效率,并且它提供了很多自定义的设置可以应 ...
- “RazorEngine.Templating.TemplateParsingException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理 其他信息: Expected model identifier.
这个问题是由于在cshtml中 引用了model这个单词 它可能和Model在解析时有冲突. 解决方法:把model换成别的单词就可以了.
- QT内省机制、自定义Model、数据库
本文将介绍自定义Model过程中数据库数据源的获取方法,我使用过以下三种方式获取数据库数据源: 创建 存储对应数据库所有字段的 结构体,将结构体置于容器中返回,然后根据索引值(QModelIndex) ...
- iOS自定义model排序
在开发过程中,可能需要按照model的某种属性排序. 1.自定义model @interface Person : NSObject @property (nonatomic,copy) NSStri ...
随机推荐
- Linux远程传输文件免密码
首先为什么Linux远程传输要免密码?手动使用scp命令传输每次都要输密码太过麻烦了. 开发中有一句话,能复制粘贴尽量不要手打. 运维中有一句话,能脚本化实现尽量不要手动执行. 远程传输文件免密码的目 ...
- Kettle建立数据库链接报错-'MS SQL Server' driver (jar file) is installed. kettle的bug,对于12.2而言
1.链接sql server数据库报错 错误连接数据库 [My_vm_win_sql] : org.pentaho.di.core.exception.KettleDatabaseException: ...
- ubuntu12.04下安装Python3.5.2 1
下载源码包 (https://www.python.org/downloads/release/python-352/) 2 解压Python-3.5.2.tar.xz 3 sudo ./conf ...
- Prometheus磁盘监控
根据挂载目录 (node_filesystem_size_bytes {mountpoint ="/"} - node_filesystem_free_bytes {mountpo ...
- php redis set 单机锁(转)
如果一个请求更新缓存的时间比较长,甚至比锁的有效期还要长,导致在缓存更新过程中,锁就失效了,此时另一个请求会获取锁,但前一个请求在缓存更新完毕的时候,如果不加以判断直接删除锁,就会出现误删除其它请求创 ...
- ubuntu下如何开机自动执行自定义脚本?
答: 将自定义脚本(假设自定义的脚本绝对路径为~/start_test.sh)添加到/etc/init.d/目录下,并更新系统启动项,命令如下: sudo cp ~/start_test.sh /et ...
- Nginx http -> https 跳转后 POST 丢失
在 nginx.conf 配置文件中添加如下配置进行 http -> https 跳转 server { listen ; server_name example.org; https://$s ...
- Linux_CentOS 文件管理和目录管理
Linux 文件管理 1.创建文件 touch file1 2.删除文件 rm -rf file11 -r:递归的删除目录下面文件以及子目录下文件. -f:强制删除,忽略不存在的文件,从不给出提示 3 ...
- PLSQL流函数代码 540页 【我】
540页 流函数代码 -- Create table create table STOCKTABLE ( TICKER ), TRADE_DATE DATE, OPEN_PRICE NUMBER, C ...
- 安卓 android studio 报错 WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and
报错截图: 问题原因:compile会被在2018年底取消,会被imlementation替代,所以会报这个警告,解决警告的方式就是换成 imlementation 就好了 解决方法: 在 app 的 ...