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_项目相关的更多相关文章

  1. 根据funID,personID获取最新规划包项目相关信息

    1.定义:根据funID,personID获取最新规划包项目相关信息(code projecttype(阶段) Pname(code+name) projectID) 项目表tbl_cfg_Proje ...

  2. django_day10_项目相关

    django_day10_项目相关 展示数据的方法 数据对象obj 普通字段 obj.字段名 ====> 数据库该字段的值 带choices参数的 obj.字段名 ====> 数据库该字段 ...

  3. django_day11_项目相关

    django_day11_项目相关 新增和编辑 路由 url(r'^category_add/$', views.category_change, name='category_add'), url( ...

  4. django_day08_项目相关

    django_day08_项目相关 定义数据库表 from django.db import models # Create your models here. class User(models.M ...

  5. IDEA 从SVN检出项目相关配置

    1.新建好一个工程,然后通过SVN检出项目 2.检出后一般tomcat的环境是配置好的,点击上方Project Structure按钮,弹出窗体,查看Project项,一般没问题,如果要配置就配置Pr ...

  6. IntelliJ IDEA 项目相关的几个重要概念介绍

    必备材料介绍 IntelliJ IDEA 对其他 IDE 转过来的用户有特别优待,对其专门整理了非常棒的资料,还请其他 IDE 过来的用户抽时间查看,会有很大帮助:Eclipse 用户可以看:http ...

  7. Java面试06|项目相关介绍

    1.明确你的项目到底是做什么的,有哪些功能 广告投放机:项目主要是为移动端有针对性的进行广告展示. 媒体管理平台SSP:为媒体端实现多种变现途径 (1)广告投放机中关于广告检索与排序的功能 1.广告检 ...

  8. 预置第三方apk到MTK项目相关问题总结

    目前5.0之后项目预置方式通用步骤为: 建立apk文件夹;  置目标apk到该文件夹下;   解压缩apk查看是否包含lib/文件夹(apk项目是否包含lib库文件);  在该文件夹下编写Androi ...

  9. Linux 首先基本包安装(vim啊什么的),源,源优化,项目架构介绍, (LNMuWsgi)Django项目相关软件mysql,redies,python(相关模块)安装配置测试

    内容 补充: 查看已启动服务的端口 netstat -tulnp |grep (方式1) ss -tulnp|grep (方式2) 前期铺垫: . Linux要能上网 . 掌握Linux软件包安装方法 ...

随机推荐

  1. 搭建个人博客,Docsify+Github webhook+JGit解决方案

    一开始博客使用的 Halo,发现问题比较多啊,时不时的莫名其妙主题各种报错,有时候还要升级,麻烦的要死,于是就想弄简单点. 这两天抽空反复倒腾了一遍,不小心还把镜像给尼玛删了,发的文章都没了,痛定思痛 ...

  2. vue封装手机验证码

    // 获取验证码 let endMsRes = new Date().getTime() + 45000; localStorage.setItem("myEndTime", JS ...

  3. 【RPA之家转载RPA创新产业峰会回看】机器人流程自动化专利态势报告

    [RPA之家转载RPA创新产业峰会回看]机器人流程自动化专利态势报告 自动化的一个专利情况的监测,就是全球监测的情况.今天我可能给大家汇报的主要是三个方面,第一个方面就是讲一下全球投资智能化的专利的一 ...

  4. UiPath文本操作Get OCR Text的介绍和使用

    一.Get OCR Text操作的介绍 使用OCR屏幕抓取方法从指示的UI元素或图像中提取字符串及其信息.执行屏幕抓取操作时,还可以自动生成此活动以及容器.默认情况下,使用Google OCR引擎. ...

  5. java中JVM和JMM之间的区别

    一 jvm结构 jvm的内部结构如下图所示,这张图很清楚形象的描绘了整个JVM的内部结构,以及各个部分之间的交互和作用. 1 Class Loader(类加载器)就是将Class文件加载到内存,再说的 ...

  6. 对象映射 - Mapping.Mapster

    前言 在项目中我们会经常遇到对象的映射,比如像Model和Dto之间的映射,或者是对象的深拷贝,这些都是需要我们自己实现的.此时,项目中会出现很多初始化对象的代码,这些代码写起来相当的枯燥乏味,那么有 ...

  7. runc hang 导致 Kubernetes 节点 NotReady

    Kubernetes 1.19.3 OS: CentOS 7.9.2009 Kernel: 5.4.94-1.el7.elrepo.x86_64 Docker: 20.10.6 先说结论,runc v ...

  8. HTTPS请求不被信用

    sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath ...

  9. 【前端面试】Vue面试题总结(持续更新中)

    Vue面试题总结(持续更新中) 题目参考链接 https://blog.csdn.net/weixin_45257157/article/details/106215158 由于已经有很多前辈深造VU ...

  10. 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法

    问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...