`
lykops
  • 浏览: 86096 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

python3 django models保存filefiled字段统一目录、不修改文件名的方法

 
阅读更多

最经编写一个model时处理filefiled,使用post_form.save()进行新增和编辑文件保存位置不统一,如果出现重复文件名重复的话,上传文件名会被改名。

现有代码如下:

models.py

class Wechat_Pubno(models.Model):
    name = models.CharField(verbose_name='名称*' , max_length=30 , blank=False , unique=True)
    qr_code = models.ImageField(verbose_name='二维码', upload_to='upload/basicdata/wechat_pubno')
  def __str__(self):
 return self.name

forms.py

class Forms_Wechat_Pubno(forms.ModelForm):
    def __init__(self , *args , **kwargs):
        super(Forms_Wechat_Pubno , self).__init__(*args, **kwargs)
        self.fields['qr_code'].required = False

    class Meta :
        model = Wechat_Pubno
        fields = '__all__'

views.py
def add(request):
    if request.method == 'POST':
        post_form = forms(request.POST,request.FILES)
        if post_form.is_valid():
            post_form.save()
            #配合post_form = forms(request.POST,request.FILES),web页面上传文件正常保存,而且不会重复
            return HttpResponseRedirect(reverse('list_' + self.model_name))
        else :
            errors_message = post_form.errors
            write_log('warning' , op_user, model_cnname + '新增失败' + str(post_form) + ',原因如下:\n' + str(errors_message))
            return render(request, 'result.html', {'error_message': str(errors_message)})
    else :
        get_form = forms()
        request_dict = {'title_name' : title_name , 'get_form': get_form} 
        return render(request, 'add_edit.html', request_dict)

改进views.py

def add(request):
    if request.method == 'POST':
        post_form = forms(request.POST,request.FILES)
        if post_form.is_valid():
        # 这段代码完全是为了处理filefiled,如果不需要使用filefiled的话,直接post_form.save()
            media_dir = MEDIA_ROOT.replace(BASE_DIR + '/', '')
            new_value = {}
            for key in detail_field_list :
            # 处理filefield
                try :
                    if key in filefield_dict :
                        filename = key + '_' + str(request.FILES[key])
                        # 文件名,字段名+上传文件名
                        file = request.FILES[key]
                        upload_dir = MEDIA_ROOT + '/upload/' + app_name + '/' + model_name + '/' + request.POST.get('name') + '/'
                        # 上传目录,MEDIA_ROOT/upload/app名/modles名/字段name的值/
                                
                        from library.webpage import uploadfile
                        fullfilename = uploadfile(file, filename, upload_dir)
                        # 最终目录为MEDIA_ROOT.replace(BASE_DIR,'')/upload/app名/modles名/字段name的值/字段名_上传文件名,防止出现重复替换操作
                        value = media_dir + '/upload/' + app_name + '/' + model_name + '/' + request.POST.get('name') + '/' + filename
                        # 数据库中写相对路径
                    else :
                        value = request.POST.get(key)
                except :
                    value = request.POST.get(key)
                    
                # 日期转换
                if re.search('^[0-9][0-9][0-9][0-9]/[0-1][0-9]', str(value)) :
                    from library.handle_datetime import date_convert
                    new_value[key] = date_convert(value , '%Y-%m-%d')
                else:
                    new_value[key] = value
    
            try :
                import_models.objects.create(**new_value)
            except Exception as e :
                print('新增数据失败,' + str(new_value) + ',原因如下:\n' + str(e))

            return HttpResponseRedirect(reverse('list_' + model_name))
        else :
            ......
    else :
        ......

edit函数类似


这样的话,可以统一,便于展示页面展示图片

分享到:
评论

相关推荐

    python web开发Django实验开发报告.docx

    - 更新模型后,运行`python manage.py makemigrations`和`python manage.py migrate`以应用更改。 6. **配置管理后台**: - **步骤**: - 在应用的`admin.py`文件中注册模型。 ```python from django.contrib ...

    基于python+django留言板

    9. **文件名:webapp**:这个文件名可能是项目的根目录,包含所有源代码,如`views.py`(视图函数)、`models.py`(模型定义)、`templates`目录(HTML模板)、`urls.py`(URL路由配置)和`settings.py`(项目设置)...

    Python Django 项目个人网站(完整代码)

    【Python Django 项目个人网站(完整代码)】 Python Django 是一个高级Web开发框架,它采用“模型-视图-控制器”(MVC)设计模式,为开发者提供了强大的工具来构建高效、可扩展的Web应用程序。这个项目是一个基于...

    编写的一个代码语言(python.django)

    “daima”这个文件名可能是一个代码文件或者包含代码的目录,如果是一个代码文件,它可能是Python源代码,里面包含了使用Django框架编写的Web应用的实现细节;如果是一个目录,那么可能包含了整个项目的结构,如...

    基于python+Django的作业管理系统,提供作业管理及查询服务.zip

    【基于Python+Django的作业管理系统】是一种使用Python编程语言和Django Web框架构建的应用程序,主要用于管理和查询作业。在计算机科学与信息技术领域,这样的系统是教育管理和在线学习平台的重要组成部分,它能够...

    PythonDjango支持像PostgresCitus这样的分布式多租户数据库

    在Python Web开发领域,Django框架以其高效、稳定和易用性著称。结合PostgreSQL的Citus扩展,我们可以构建支持分布式多租户数据库的应用。本文将深入探讨如何利用Django与Citus来实现这一目标,以及它们带来的优势和...

    Python基于Django的新生入学管理系统源码.zip

    由于提供的信息仅有一个总文件名,没有具体的子文件列表,我们可以假设这个压缩包中包含了一整套Django项目的文件结构,如`manage.py`(Django项目的入口文件)、`requirements.txt`(列出项目依赖的Python库)、`...

    Python-基于Django开发的商场后端管理系统

    【Python-基于Django开发的商场后端管理系统】是一个典型的Web应用开发实例,它利用了Python的Django框架来构建一个功能完善的商场后台管理平台。这个系统为初学者提供了了解和学习Python后端开发,尤其是Django框架...

    python django1.0.2批量上传

    3. **模型设计**:如果文件需要与数据库中的记录关联,可以创建一个模型,包含文件字段,如`models.FileField()`,并处理上传的文件与模型实例之间的关系。 4. **模板渲染**:在HTML模板中,使用Django的表单渲染...

    django简易版网盘

    【标题】"django简易版网盘"所涉及的知识点主要集中在使用Django框架构建一个基本的文件存储系统,它提供了用户注册、登录、文件上传和下载的功能。Django是Python Web开发的一个强大框架,以其MVT(Model-View-...

    django之对FileField字段的upload_to的设定方法

    为了避免文件名冲突,造成同一目录下文件重名的问题,Django内置了`strftime`方法,允许我们按照日期时间来格式化文件名。例如: ```python from datetime import datetime class User(models.Model): avatar = ...

    pythonweb开发Django实验开发报告.pdf

    【Python Web开发Django实验开发报告】 在本次实验中,主要目标是学习和掌握Python的Web框架Django的使用,包括项目的创建、数据库操作、模型定义、数据迁移以及Django管理站点的运用。以下是详细的知识点说明: 1...

    PyPI 官网下载 | django_guid-0.2.1-py3-none-any.whl

    再者,“py3”表明这个库是为Python 3编写的,不支持Python 2。然后,“none-any”表示这个包没有特定于任何操作系统或架构,可以在多种环境上运行。最后,“.whl”是Python的二进制分发格式,这种格式的文件可以...

    Python库 | django-versatileimagefield-0.4.tar.gz

    《Python库深度解析:Django VersatileImageField》 在Python的世界里,Django框架以其高效、简洁的设计理念,成为了众多开发者青睐的Web开发工具。而`django-versatileimagefield`是一个针对Django的扩展库,它为...

    python中Django文件上传方法详解

    在Python的Web开发框架Django中,文件上传是一项常见的需求。本篇将详细解析Django实现文件上传的步骤,确保你能够理解并实践这一功能。 首先,我们需要配置Django项目的`settings.py`文件。在该文件中,设置`MEDIA...

    Python-一个以Django作为框架搭建的内容管理系统

    3. **定义模型**:在应用的models.py文件中,定义数据库模型,比如文章模型可能包括标题、内容、发布日期等字段。 4. **数据库迁移**:模型定义后,需要同步到数据库。使用 `python manage.py makemigrations` 创建...

    Python Django Web开发 零基础学习 搭建 待办清单网站 视频地址:.zip

    3. **Django项目创建**:学习如何使用`django-admin startproject`命令创建一个新的Django项目,并理解项目目录结构。 4. **Django应用创建**:创建用于待办事项功能的Django应用,这通常涉及到`python manage.py ...

Global site tag (gtag.js) - Google Analytics