• 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、然后 进行上传,大功告成 ~~

  • 相关阅读:
    章节八、2-火狐的插件TryXPath
    章节八、1-如何使用火狐开发者工具来查找元素
    章节七、6-Map集合的区别
    章节七、5-Maps
    章节七、4-Sets
    章节七、3-ArrayList和LinkedList对比
    章节七、2-Linked List
    jQuery中$符号的作用
    jQuery基础的HTML与text区别
    推荐一些github上的免费好书
  • 原文地址:https://www.cnblogs.com/xmdykf/p/11403000.html
Copyright © 2020-2023  润新知