首页 技术 正文
技术 2022年11月15日
0 收藏 749 点赞 2,579 浏览 1738 个字

本篇概述

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

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

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

    Django 上传文件 (如何)

models代码背景

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

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

  于admin.py文件中

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

Django 注意知识点(一)

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

   先与 视图 views.py文件中

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

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

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

Django 注意知识点(一)

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

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

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

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

 works = work()
works.save()
# 多对多字段存入
for tags in tag:
id = Tag.objects.get(name=tags).id
works.Tag.add(id)
works.save()

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

四,Django上传文件,如何

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

 # 上传文件 MEDIA_ROOT = os.path.join(BASE_DIR, r'static\upfile')

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

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

  3、修改 form 表单属性

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

  4、与视图Views.py文件中

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

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

Django 注意知识点(一)

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,111
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,584
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,431
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,203
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,838
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,922