zoukankan      html  css  js  c++  java
  • Django 注意知识点(一)

    本篇概述

      Django Admin后台显示 多对多字段(如何)

      Django 模板 显示 多对多字段(如何)

      Django 将表单中上传的多对多字段存入数据库 (如何)

        Django 上传文件 (如何)

    models代码背景

    1 class Tag(models.Model):
    2         name = models.CharField(max_length=20, verbose_name="名称")
    3 
    4 class work(models.Model):
    5         Tag = models.ManyToManyField(Tag, verbose_name="标签")

    一,Django Admin后台显示 多对多字段

      于admin.py文件中

    1 @admin.register(work)
    2 class workAdmin(admin.ModelAdmin):
    3     '''展示tags'''
    4     def show_tags(self, obj):
    5         return [tag.name for tag in obj.Tag.all()]
    6          # 这里运用了Python的堆导式
    7     show_tags.short_description = "标签"  # 设置表头
    8     list_display = ["show_tags"]

    二,Django 模板 显示 多对多字段

       先与 视图 views.py文件中

    1 class IndexView(View):
    2     def get(self, request):
    3         works = work.objects.all()[:2]
    4 
    5         context = {
    6             'works': works,
    7         }
    8         return render(request, 'index.html', context)

      然后,(urls.py中的配置就不多说了,直接进如何在模板中取得)

    1 {% for work in works %}
    2       {% for tag in work.Tag.all %}
    3              {# 下面即 该作品对应的标签 #}
    4                    {{tag.name}}  
    5        {% endfor %}
    6 {% endfor%}    

    三,Django 将表单中上传的多对多字段存入数据库

      1、首先获取表单中上传的多对多数据,假设 上传的 标签(多)且 标签与作品 work 的关系是 ManyToManyField

    1 # 标签
    2 tag = request.POST.getlist("tag")

      2、创建一个 work 对象 然后 进行数据的交互

    1 works = work()
    2 works.save()
    3 # 多对多字段存入
    4 for tags in tag:
    5     id = Tag.objects.get(name=tags).id
    6     works.Tag.add(id)
    7 works.save()

      当然这必须是 数据库中 Tag 要有的标签名称才行,不然找不到 id 无法存入,因为 add()方法就是的参数是 id,至于非标签已有存入 有待 摸索~~

    四,Django上传文件,如何

      1.  首先与 settings.py文件中增添

    1 # 上传文件
    2 
    3 MEDIA_ROOT = os.path.join(BASE_DIR, r'staticupfile')

      2、于 模板 表单中 添加 input:file + tap 。。。

    1 <input type="file" name="file">

      3、修改 form 表单属性

    1 method="post"   方法必须是 post 
    2 enctype="multipart/form-data"   上传文件必备

      4、与视图Views.py文件中

     1 # 这里 Django视图函数,我用的基于类的视图
     2 # 例如 class AddView(View)
     3 # 在其中 
     4     def post(self, request):
     5         try:
     6             f = request.FILES["file"]
     7             # 合成文件在服务器端的路径
     8             filePaths = "static/upfile/" + f.name  # 这里的原因:如果是在分页中,文件路径会额外添加如 /page_id/ 导致后面调用失败,根据个人情况进行合理调整
     9             filePath = os.path.join(settings.MEDIA_ROOT, f.name)
    10             print(filePath)
    11             with open(filePath, 'wb') as fp:
    12                 #  以文件流的形式一段段上传
    13                 for info in f.chunks():
    14                     fp.write(info)
    15         except:
    16             return HttpResponse("上传失败")
    View Code

      5、然后 进行上传,大功告成 ~~

  • 相关阅读:
    java基础部分的一些有意思的东西。
    antdvue按需加载插件babelpluginimport报错
    阿超的烦恼 javaScript篇
    .NET E F(Entity Framework)框架 DataBase First 和 Code First 简单用法。
    JQuery获得input ID相同但是type不同的方法
    gridview的删除,修改,数据绑定处理
    jgGrid数据格式
    Cannot read configuration file due to insufficient permissions
    Invoke action which type of result is JsonResult on controller from view using Ajax or geJSon
    Entity model数据库连接
  • 原文地址:https://www.cnblogs.com/xmdykf/p/11403000.html
Copyright © 2011-2022 走看看