django_day09_项目相关
django_day09_项目相关
展示数据:
给模板一个querySet对象列表,循环出对象列表obj
普通字段
- obj.字段名 ----》 数据库中的数据
外键
- obj.外键 -------》外键的对象 给类定义__ str__的方法
带choices参数的
- obj.字段名 ------》 数据库中的数据这个显示不是很好i
- obj.get_ 字段名 _display() 显示定义好的结果 在模板中使用不加()
自定义方法
def show_publish_status(self):
color_dict = {True:'green',False:'#772a4d'}
return mark_safe('<span style="background: {};color: white;padding: 3px">{}</span>'.format(color_dict[self.publish_status],self.get_publish_status_display())){{form_obj.title.label}} #指定的是models.py 里面的字段中的:verbose_name='文章标题'
循环生成form表单
#models中(数据库中)
class Article(models.Model):
"""
标题,文章内容 作者 板块 创建时间 更新时间 删除状态 """
title = models.CharField(max_length=64,verbose_name='文章标题')
abstract = models.CharField(max_length=256,verbose_name='文章摘要')
content = models.TextField(verbose_name='文章内容')
author = models.ForeignKey(User,on_delete=models.DO_NOTHING,blank=True,verbose_name='作者')
category = models.ForeignKey(Category,on_delete=models.DO_NOTHING,blank=True,null=True,verbose_name='分类')
creat_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True,verbose_name='更新时间')
publish_status = models.BooleanField(choices=((False,'未发布'),(True,'发布')),default=False,verbose_name='发布状态')
detail = models.OneToOneField('ArticleDetail',on_delete=models.DO_NOTHING)
def show_publish_status(self):
color_dict = {True:'green',False:'#772a4d'}
return mark_safe('<span style="background: {};color: white;padding: 3px">{}</span>'.format(color_dict[self.publish_status],self.get_publish_status_display())) #forms.py
class ArticleForm(forms.ModelForm):
class Meta:
model = models.Article#只能是model
fields = "__all__"
exclude = ['detail','content']
#views.py中
def article_add(request): form_obj = ArticleForm() return render(request,'article_add.html',{'form_obj':form_obj})
#模板中
<form class="form-horizontal">
{% for field in form_obj %}
<div class="form-group">
<label for="{{field.id_for_label}}" class="col-sm-2 control-label">{{field.label}}</label>
<div class="col-sm-10">
{{field }}
</div>
</div>
效果:
在字段中加入class属性
第一种方法
widgets = {
'title':forms.TextInput(attrs={'class':'form-control'})
}
#这样的话每个都加很麻烦
第二中方法
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)#执行父类方法 #自定义的操作
# self.fields 是个有序字典 字典中的值就是字段的对象
for field in self.fields.values():#field 就是models中定义的字段
field.widget.attrs['class'] = 'form-control'#field.widgrt
# 是拿到对应的插件的对象field.widget.attrs 然后拿到对应的属性做修改
<div class="col-sm-8"> 修改长度!
发送POST请求
if request.method == 'POST':
form_obj = ArticleForm(request.POST)#拿到form表单
#开始校验
if form_obj.is_valid():
form_obj.save()#保存
return redirect('article_list')
<form class="form-horizontal" method="post" novalidate>
{% csrf_token %}插入数据—有两张表需要同时存储 额外加一个input输入框
<div class="form-group">
<label for="detail" class="col-sm-2 control-label">文章详情</label>
<div class="col-sm-8">
<textarea class="form-control" rows="3" id="detail"></textarea>
</div>
</div>
def article_add(request):
form_obj = ArticleForm()
if request.method == 'POST':
form_obj = ArticleForm(request.POST)#拿到form表单 #开始校验
if form_obj.is_valid():
# form_obj.save()#保存 要插入两张表的内容不用这个
#插入文章详情
detail = request.POST.get('detail')
detail_obj = models.ArticleDetail.objects.create(content=detail) #拿到文章详情对象
#往文章里插入内容
#form_obj.cleaned_data 星星打散就可以拿到生成的表单中数据 但是还有自己创建的没加上
#额外加一个
#插入文章
form_obj.cleaned_data['detail_id'] = detail_obj.pk
models.Article.objects.create(**form_obj.cleaned_data)
return redirect('article_list')
return render(request,'article_add.html',{'form_obj':form_obj})
- 手动cleaned_data 添加之后用save就不中用了 要是想用 写个全局钩子
django_day09_项目相关的更多相关文章
- 根据funID,personID获取最新规划包项目相关信息
1.定义:根据funID,personID获取最新规划包项目相关信息(code projecttype(阶段) Pname(code+name) projectID) 项目表tbl_cfg_Proje ...
- django_day10_项目相关
django_day10_项目相关 展示数据的方法 数据对象obj 普通字段 obj.字段名 ====> 数据库该字段的值 带choices参数的 obj.字段名 ====> 数据库该字段 ...
- django_day11_项目相关
django_day11_项目相关 新增和编辑 路由 url(r'^category_add/$', views.category_change, name='category_add'), url( ...
- django_day08_项目相关
django_day08_项目相关 定义数据库表 from django.db import models # Create your models here. class User(models.M ...
- IDEA 从SVN检出项目相关配置
1.新建好一个工程,然后通过SVN检出项目 2.检出后一般tomcat的环境是配置好的,点击上方Project Structure按钮,弹出窗体,查看Project项,一般没问题,如果要配置就配置Pr ...
- IntelliJ IDEA 项目相关的几个重要概念介绍
必备材料介绍 IntelliJ IDEA 对其他 IDE 转过来的用户有特别优待,对其专门整理了非常棒的资料,还请其他 IDE 过来的用户抽时间查看,会有很大帮助:Eclipse 用户可以看:http ...
- Java面试06|项目相关介绍
1.明确你的项目到底是做什么的,有哪些功能 广告投放机:项目主要是为移动端有针对性的进行广告展示. 媒体管理平台SSP:为媒体端实现多种变现途径 (1)广告投放机中关于广告检索与排序的功能 1.广告检 ...
- 预置第三方apk到MTK项目相关问题总结
目前5.0之后项目预置方式通用步骤为: 建立apk文件夹; 置目标apk到该文件夹下; 解压缩apk查看是否包含lib/文件夹(apk项目是否包含lib库文件); 在该文件夹下编写Androi ...
- Linux 首先基本包安装(vim啊什么的),源,源优化,项目架构介绍, (LNMuWsgi)Django项目相关软件mysql,redies,python(相关模块)安装配置测试
内容 补充: 查看已启动服务的端口 netstat -tulnp |grep (方式1) ss -tulnp|grep (方式2) 前期铺垫: . Linux要能上网 . 掌握Linux软件包安装方法 ...
随机推荐
- 使用dnSpy对无源码EXE或DLL进行反编译并且修改
背景 总有一些特殊情况,我们没有源码,但是某个C#程序集dll或者可执行程序exe影响到我们代码的正常运行,我们希望得到源码,能改掉或者修改某些bug,但是苦于没有源码,这个时候可以用dnspy进行源 ...
- Python 用configparser读写ini文件
一.configparser 简介Python用于读写ini文件的一个官方标准库.具体详见官网链接 二.configparser 部分方法介绍 方法 描述 read(filenames) filesn ...
- C++ 练气期之二维数组与矩阵运算
1. 前言 C++中的一维数组可以存储线性结构的数据,二维数组可以存储平面结构的数据.如班上所有学生的各科目成绩就有二个维度,学生姓名维度和科目成绩维度. 这样的表格数据可以使用二维数组进行存储. 当 ...
- Metasploit(msf)利用ms17_010(永恒之蓝)出现Encoding::UndefinedConversionError问题
Metasploit利用ms17_010(永恒之蓝) 利用流程 先确保目标靶机和kali处于同一网段,可以互相Ping通 目标靶机防火墙关闭,开启了445端口 输入search ms17_010 搜索 ...
- Collections集合工具类的方法_sort(List)和sort(List,Comparator)方法
Comparator比较器 我们还是先研究这个方法 public static <T> void sort(List<T> list):将集合中元素按照默认规则排序. 不过这次 ...
- NC20566 [SCOI2010]游戏
题目链接 题目 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属 ...
- MATLAB复习资料——浙商大管工学院适用
包含12套复习卷,课堂PPT 下载链接:MATLAB练习模拟题库(12套).pdf - 蓝奏云 (lanzoub.com)
- Redis相关练习操作,redis连接池
package com.shujia.controller; import com.shujia.entity.MyTypedTuple; import com.shujia.entity.User; ...
- C#基础-面向对象详解
面向对象详解 一.什么是面向对象 1>面向对象是一种程序设计思想 2>面向过程和面向对象是什么? 例如要把大象放冰箱怎么做? 面向过程:打开冰箱门->把大象扔进去->关上冰箱门 ...
- 性能浪费的日志案例和使用Lambda优化日志案例
有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费.而Lambda表达式是延迟执行的,这正好可以作为解决方案,提升性能 性能浪费的日志案例 日志可以帮助我们快速的定位问题,记录程序运行过程中的 ...