首页 > 其他分享 >Django—Form两种解决表单数据无法动态刷新的方法

Django—Form两种解决表单数据无法动态刷新的方法

时间:2023-04-22 19:22:24浏览次数:36  
标签:obj Form models request 表单 html return Django class

一、无法动态更新数据的实例

# Create your models here.
class Classes(models.Model):
    title=models.CharField(max_length=32)
    def __str__(self):
        return self.title

class Teacher(models.Model):
    name=models.CharField(max_length=32)
    t2c=models.ManyToManyField(Classes)
    def __str__(self):
        return self.name

2. views的功能有查看、添加、编辑班级或教师表

class ClsForm(Form):
    title=fields.RegexField('老男孩',error_messages={'invalid':'请以 老男孩 开头'})

class TchForm(Form):
    # name=fields.CharField(max_length=16,min_length=2,widget=widgets.TextInput(attrs={'class':'form-control'}))
    # t2c=fields.MultipleChoiceField(
    #     choices=models.Classes.objects.values_list('id','title'),
    #     widget=widgets.SelectMultiple(attrs={'class':'form-control'})
    # )
    # class LoginForm(forms.Form):
    # ...
    # hobby = forms.fields.MultipleChoiceField(
    #     choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
    #     label="爱好",
    #     initial=[1, 3],
    #     widget=forms.widgets.CheckboxSelectMultiple()
    # )
    name = fields.CharField(max_length=16, min_length=2,
                            widget=widgets.TextInput(attrs={'class': 'form-control'}))
    t2c = fields.MultipleChoiceField(
        choices = models.Classes.objects.values_list('id', 'title'),
        widget = widgets.SelectMultiple()
        # widget=widgets.CheckboxSelectMultiple(attrs={'class': 'form-control'})
    )

def classes(request):
    cls_list=models.Classes.objects.all()
    return render(request,'class/classes.html',{'cls_list':cls_list})

def teachers(request):
    tch_list = models.Teacher.objects.all()
    return render(request, 'class/teachers.html', {'tch_list': tch_list})


def add_cls(request):
    if request.method=='GET':
        obj=ClsForm()
        return render(request,'class/add_classes.html',{'obj':obj})
    else:
        obj=ClsForm(request.POST)
        # print(obj)
        if obj.is_valid():
            models.Classes.objects.create(**obj.cleaned_data)
            return redirect(reverse('classes'))
        return render(request,'class/add_classes.html',{'obj':obj})

def add_tch(request):
    if request.method=="GET":
        obj=TchForm()
        return render(request,'class/add_teacher.html',{'obj':obj})
    else:
        obj=TchForm(request.POST)
        if obj.is_valid():
            tc=obj.cleaned_data.pop('t2c')
            tch_obj=models.Teacher.objects.create(name=obj.cleaned_data['name'])
            tch_obj.t2c.add(*tc)
            return redirect(reverse('teacher'))
        return render(request,'class/add_teacher.html',{'obj':obj})

def edit_class(request,pk):
    if request.method == 'GET':
        cls = models.Classes.objects.filter(id=pk).first()
        obj = ClsForm(initial={'title': cls.title})
        return render(request, 'class/edit_classes.html', {'nid': pk, 'obj': obj})
    else:
        obj = ClsForm(request.POST)
        if obj.is_valid():
            models.Classes.objects.filter(id=pk).update(**obj.cleaned_data)

        return redirect(reverse('classes'))

    return render(request, 'class/edit_classes.html', {'nid':pk, 'obj': obj})


def edit_tch(request,pk):
    if request.method=='GET':
        tch=models.Teacher.objects.filter(id=pk).first()
        v=tch.t2c.values_list('id')
        cls_ids = list(zip(*v))[0] if list(zip(*v)) else []  # 格式化为列表类型
        obj = TchForm(initial={'name': tch.name, 't2c': cls_ids})
        return render(request, 'class/edit_teacher.html', {'nid': pk, 'obj': obj})
    else:
        obj = TchForm(request.POST)
        if obj.is_valid():
            tc = obj.cleaned_data.pop('t2c')  # 获取修改后的任课班级id
        tch_obj = models.Teacher.objects.filter(id=pk).first()
        tch_obj.name = obj.cleaned_data['name']  # 更新教师姓名方法2
        tch_obj.save()
        tch_obj.t2c.set(tc)
        return redirect(reverse('teacher'))
    return render(request,'class/edit_teacher.html',{'nid':pk,'obj':obj})

# models.Teacher.objects.filter(id=nid).update(name=obj.cleaned_data['name'])     # 更新教师姓名方法1

classes.html

{% load static %}
<!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <title>班级列表</title>
      <link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.css' %}">
  </head>
  <body>
  <div style="width: 700px; margin: 30px auto">
     <a class="btn btn-default" href="{% url 'add_cls' %}" style="margin-bottom: 10px">添加班级</a>
         <table class="table table-hover" border="1" cellspacing="0">
             <thead>
             <tr>
                 <th>ID</th>
                 <th>班级</th>
                 <th>操作</th>
             </tr>
             </thead>
             <tbody>
                 {% for item in cls_list %}
                     <tr>
                         <td>{{ item.id }}</td>
                         <td>{{ item.title }}</td>
                         <td><a href="{% url 'edit_cls' item.pk %}{{item.id }}">编辑</a></td>
                     </tr>
                 {% endfor %}
             </tbody>
         </table>
 </div>
 </body>
 </html>

addclass.html

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>添加班级</title>
 </head>
 <body>
 <h1>添加班级</h1>
 <form action="" method="post">
     {% csrf_token %}
     <p>
         {{ obj.title }} {{ obj.errors.title.0 }}
     </p>
     <input type="submit" value="提交">
 </form>
 </body>
 </html>

edit_class.html

<!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <title>编辑班级</title>
  </head>
  <body>
  <h1>编辑班级</h1>
  <form action="" method="post">
     {% csrf_token %}
     <p>
         {{ obj.title }} {{ obj.errors.title.0 }}
     </p>
     <input type="submit" value="提交">
 </form>
 </body>
 </html>

teachers.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>教师列表</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.css' %}">
</head>
<body>
<div style="width: 700px; margin: 30px auto">
     <a class="btn btn-default" href="{% url 'add_tch' %}" style="margin-bottom: 10px">添加教师</a>
         <table class="table table-hover" border="1" cellspacing="0">
             <thead>
             <tr>
                 <th>ID</th>
                 <th>姓名</th>
                 <th>任教班级</th>
                 <th>操作</th>
             </tr>
             </thead>
             <tbody>
                 {% for item in tch_list %}
                     <tr>
                         <td>{{ item.id }}</td>
                         <td>{{ item.name }}</td>
                         <td>
                             {% for row in item.t2c.all %}
                                 <span style="border: solid gray 1px">{{ row.title }}</span>
                             {% endfor %}
                         </td>
                         <td><a href="{% url 'edit_tch' item.id %}">编辑</a></td>
                     </tr>
                 {% endfor %}
             </tbody>
         </table>
 </div>
 </body>
 </html>

add_teacher.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加教师</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.css' %}">
</head>
<body>
<div style="width: 500px; margin: 20px auto">
 <h3 style="width: 100px; margin: 10px auto">添加教师</h3>
     <form class="form-horizontal" action="" method="post">
         {% csrf_token %}
   <div class="form-group">
     <label class="col-sm-2 control-label">姓名</label>
     <div class="col-sm-10">
       {{ obj.name }} {{ obj.errors.name.0 }}
     </div>
   </div>
   <div class="form-group">
     <label class="col-sm-2 control-label">班级</label>
     <div class="col-sm-10">
             {{ obj.t2c }} {{ obj.errors.t2c.0 }}
     </div>
   </div>
   <div class="form-group">
     <div class="col-sm-offset-2 col-sm-10">
       <input type="submit" class="btn btn-default" value="提交"/>
     </div>
   </div>
 </form>
 </div>
 </body>
 </html>

edit_teacher.html

{% load static %}
<!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <title>编辑教师</title>
      <link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.css' %}">
  </head>
  <body>
  <div style="width: 500px; margin: 20px auto">
 <h3 style="width: 100px; margin: 10px auto">编辑教师</h3>
     <form class="form-horizontal" action="" method="post">
         {% csrf_token %}
   <div class="form-group">
     <label class="col-sm-2 control-label">姓名</label>
     <div class="col-sm-10">
       {{ obj.name }} {{ obj.errors.name.0 }}
     </div>
   </div>

   <div class="form-group">
     <label class="col-sm-2 control-label">班级</label>
     <div class="col-sm-10">
             {{ obj.t2c }} {{ obj.errors.t2c.0 }}
     </div>
   </div>
   <div class="form-group">
     <div class="col-sm-offset-2 col-sm-10">
       <input type="submit" class="btn btn-default" value="提交"/>
     </div>
   </div>
 </form>
 </div>
 </body>
 </html>

 

标签:obj,Form,models,request,表单,html,return,Django,class
From: https://www.cnblogs.com/mengdie1978/p/17343733.html

相关文章

  • 一个低代码拖拉拽的表单编辑器,开源咯!!!
    编辑器介绍先来个图,有个初步的认识抱歉,原谅图有点模糊哈github:https://github.com/Liberty-liu/Everright-formEditordemo:https://everright.site/zh-cn/module/formEditor/introduction.htmlEverright-formEditor是一个基于vue3的可视化编辑器,依赖于element-plus和vant进行开......
  • Appium-Server-GUI、Appium-Inspector、Android (SDK tools package)commandlinetools
    公众号回复中增加了最新版Appium和安卓SDK下载链接Appium-Server-GUI-mac-1.22.3-4.dmgAppium-Server-GUI-windows-1.22.3-4Appium-Inspector-mac-2023.4.1Appium-Inspector-windows-2023.4.1(SDKtoolspackage)commandlinetools-mac-9477386_latest(SDKtoolspackage)co......
  • django常用命令
    Django常用命令如下:创建Django项目:django-adminstartprojectproject_name该命令会创建一个名为project_name的Django项目创建Django应用程序:pythonmanage.pystartappapp_name该命令会在Django项目中创建一个名为app_name的应用程序。启动Django服务器: pythonmanag......
  • django项目结构
    Django项目结构的详细说明如下:project_name/项目名称,即项目的根目录。manage.pyDjango项目管理工具,可以用它来执行很多操作,如启动服务器、创建数据库等。project_name/项目包,它是存放项目的所有Python代码的地方,该目录下应该包含__init__.py文件,表示该目录是一个Python包。......
  • winform设置背景图闪屏问题解决
    直接将以下代码复制粘贴到出现闪屏的窗体中即可:#region解决添加背景图片时闪屏的问题protectedoverrideCreateParamsCreateParams{get{CreateParamscp=base.CreateParams;cp.Ex......
  • django实现文件上传、删除、下载
    django文件上传定义一个包含FileFiled的类ModelWithFileField,其中upload字段的upload_to参数表示上传的文件存放在什么地方classModelWithFileField(models.Model):filename=models.CharField(max_length=100,verbose_name="文件名称")upload_date=models.Date......
  • django-restful:购物车 学习记录
    购物车就有获取购物车详情加入购物车删除购物记录同样直接使用mixins中的就够了view这里面没有一个陌生的基本都是前面学习过了的classShoppingCartViewset(viewsets.ModelViewSet):"""购物车功能list:获取购物车详情create:......
  • # jquery # form表单上传文件
    form表单上传文件<formaction="/upload/"method="post"enctype="multipart/form-data">头像:<inputtype="file"name="head-pic">用户名:<inputtype="text"name="username">......
  • AntdPro中formItemProps和fieldProps的区别
    title:AntdPro中formItemProps和fieldProps的区别date:2023-04-1312:50:23tags:["React","AntDesign"]categories:["前端篇"]最近在工作中接触到了antd和antdpro,作为一个react和antd新人,在学习和使用中遇到了不少的问题,下边就常见的一个问题来进行记录,后......
  • 深入了解 Transformers – Part 1: 介绍 Transformer 模型
    动动发财的小手,点个赞吧!自从最新的LargeLanguageModels(LLaM)发布以来,如OpenAI的GPT系列、开源模型Bloom或谷歌发布的LaMDA等,Transformer展现出了巨大的潜力,成为了深度学习的前沿架构楷模。尽管已经有几篇文章介绍了transformer及其背后的数学原理,但在本文中,我想结合我认为最......