首页 > 其他分享 >Django 里实现表格内容上传

Django 里实现表格内容上传

时间:2024-06-07 19:30:02浏览次数:15  
标签:表格 form models 上传 list Django dict data name

先看效果图:
请添加图片描述

当没有添加数据,就按 提交 键就会出现报错
请添加图片描述


下面是操作步骤

1. 先在 views.py 文件里做添加

# 在 views.py 

class AssetModelForm(forms.ModelForm):
    #newField = forms.CharField()
    class Meta:
        model = models.AssetSet 
        fields = ['name', 'price', 'category', 'depart']
        #fields = "__all__"

        """
        # 单一的给某个field添加样式
        widgets = {
            'category': forms.Select(attrs={'style': "width: 300px;"})
        }
        """

    # 给所有的 field 提供样式
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for name, field in self.fields.items():
            if name == "price":
                continue
            field.widget.attrs['style'] = "width: 100px"

def asset_add(request):
    """
    # 获取所有类型
    cat_list = models.AssetSet.category_choices
    dp_list = models.Department.objects.all()

    form = AssetForm()
    """
    
    if request.method == "GET":
        cat_list = models.AssetSet.category_choices
        dp_list = models.Department.objects.all()
        form = AssetModelForm()
        return render(request, 'asset_add.html', {'cat_list': cat_list, 'dp_list': dp_list, 'form': form})

    # print(request.POST)
    # 隐含功能:字段不能为空
    form = AssetModelForm(data=request.POST)
    if form.is_valid():
        # data_dict = form.cleaned_data

        # 在数据库里创建一条数据
        # 第一种写法
        # models.AssetSet.objects.create(name=data_dict['name'], price=data_dict['price'], category=data_dict['category'], depart_id=data_dict['depart'].id)
        
        """
        obj = models.Department.objects.filter(id = 1).first()
        models.AssetSet.objects.create(name="", price="", category=1, depart=obj)
        """

        # 第二种写法
        # models.AssetSet.objects.create(name=data_dict['name'], price=data_dict['price'], category=data_dict['category'], depart=data_dict['depart'])

        # 第三种方法
        # models.AssetSet.objects.create(**data_dict)

        # 第四种方法
        # 用户提交的数据,直接写入数据库
        # 这种写法更快地将数据保存到数据表里
        form.save()

        return redirect('/asset/list/')
    else:
        print(form.errors)
        #return HttpResponse("失败")

		# 传 form 是为了保存表格输入的数据
        return render(request, "asset_add.html", {"form": form})

2. 在 asset_add.html 文件里修改

<form method="post" action="/asset/add/" novalidate>
    <!-- {{ form.name }}
    {{ form.price }} -->

    {% csrf_token %}
    {% for field in form %}
        <div>
            <label>{{ field.label }}</label>
            <div>
                {{ field }}
                <!-- 取错误里的第一个字段,会显示英文 -->
                <span style="color: red;">{{ field.errors.0 }}</span>
            </div>
        </div>
    {% endfor %}

    <button type="submit">提 交</button>
</form>

3. 为了使网页呈现中文
settings.py 文件里修改

#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'


点个赞呗~

标签:表格,form,models,上传,list,Django,dict,data,name
From: https://blog.csdn.net/BSCHN123/article/details/139532115

相关文章

  • Django获取 verbose_name 显示到前端
    在models.py文件里,创建各个数据表models#在models.py文件里classAssetSet(models.Model):"""资产表"""name=models.CharField(verbose_name="名称",max_length=32)price=models.IntegerField(verbose_name=&quo......
  • 关于正在开发中的DjangoStarter v3版本
    前言最近做的这个项目大量使用了python及其相关的生态,因此自然而然选择了我的DjangoStarter作为后端框架之前v2版本是用RestFramework做接口的,后面我试用了一次django-ninja之后就喜欢这种类似FastApi的写接口方式正所谓天下苦drf久矣,在新的v3版本框架中,我决定......
  • vue2使用Clodop插件打印表格,分页,每页显示页头页尾,自定义纸张大小
    一、前往lodop官网,下载插件,下载中心-Lodop和C-Lodop官网主站 这里下载的window64位的,将插件安装好,运行,会看到引入项目第一种、可以直接将script标签放入vue的head中,在项目运行时自动加载。第二种、也可以将js文件下载至本地,通过import引入,前提是将CLODOP对象export出......
  • 如何在 django pytest 中使用现有数据库?
    我为我的API设置了默认模式,并为数据搜索设置了现有模式。这是数据库设置:DATABASES={"default":{"ENGINE":"django.db.backends.postgresql"、"OPTIONS":{"options":"-csearch_path=public"}、"NA......
  • 195、Django实战:从部署到运维,打造高效Web应用
    DjangoChannels:实现WebSocket与实时通信本文将向您介绍Python开发框架Django中的一个重要组件——DjangoChannels,它使得在Django中实现WebSocket通信变得轻而易举。通过阅读本文,您将了解WebSocket的概念、DjangoChannels的工作原理以及如何在实际项目中使用它来实现实时......
  • 197、加速Django应用:性能优化全攻略
    Python开发框架Django之性能优化:提高应用程序的运行速度本文将为大家介绍如何使用Python开发框架Django进行性能优化,以提高应用程序的运行速度。我们将探讨一系列的技巧和最佳实践,帮助你优化Django应用程序的性能,从而提供更好的用户体验。1.概述在当今的数字化时代,应用......
  • 199、扩展Django之力:第三方库集成指南
    Python开发框架Django之Django插件与扩展:第三方库的使用与集成本文将介绍如何在Django项目中使用和集成第三方库,以扩展Django的功能,提高开发效率。我们将讨论Django插件的概念,如何选择合适的第三方库,以及如何将第三方库集成到Django项目中。1.Django插件与扩展的概念在......
  • 前端 JS 经典:阿里云文件上传思路
    前言:功能点概括:1、多选文件2、选择文件夹3、拖拽4、选择后形成一个列表,列表里有一些信息5、有进度条6、控制并发数7、可取消8、展示统计信息1.交互实现交互的目标是要拿到file对象。只要拿到file对象,就能通过网络上传。1.1如何选择多文件给input添加multip......
  • 利用智普AI大模型进行基于 RAG 的表格数据问答
    前言最近一直在探索RAG相关的技术,刚好尝试了一些国产的大模型,发现智普的大模型用着还挺不错的,因此就尝试用它对表格数据进行问答。遇到的问题智普的SDK更新到了2.0的版本,这也就导致原来Langchain的版本无法适配了,需要重新自己写一些代码才可以。另外,Langchain提供的cr......
  • vue+java实现大文件上传解决方案
    分片上传大文件Demo为了实现分片上传,包括断点续传和重试机制,我们可以使用Vue.js作为前端,SpringBoot作为后端。这个方案包括以下步骤:前端:使用Vue.js进行文件分片上传。管理分片上传的进度和状态,处理断点续传和重试。后端:使用SpringBoot处理分片上传的请求。存储上......