超详细教程-Django博客的标签值的前后端交互

效果展示

上传前:

在这里插入图片描述
上传后:
在这里插入图片描述

实现逻辑:

  • 前端将后端传输的标签ID与标签名展示
  • 点击确认上传博客时,前端获取已选取的标签ID,并传输到后端
  • 后端获取数据后,将数据上传至数据库

PS:标签与博客之间是多对多关系,所以前端我使用CheckBox

相关代码:

前端HTML

PS:前端获取列表,后端使用函数getlist获取的值为空,所以选择用json将其转换为字符串后再传给后端

{% for tag in tags %}
    <label class="checkbox-inline ">
    <input type="checkbox" id="tag" name="tag" value="{{ tag.id }}"> {{ tag.name }}
    </label>
{% endfor %}


前端js

//获取标签值列表
function gettags() {
    var objs = document.getElementsByName('tag');
    var tags = [];
    for(var i = 0; i < objs.length; i++) {
    if (objs[i].checked) {
    	tags.push(objs[i].value);
    }
    }
    return(tags);
}

$("#create_blog").click(function () {
        //空值,数据规则验证
        var  tag_list = gettags();
		if(tag_list.length===0){
            alert('请选择博客标签')
        }
        else{
            $.ajax({
                url:"/blog/add",
                type:"post",
                data:{//当然还有其他博客数据,这里为了看起来更明确,删除掉了
                     tag_list:JSON.stringify(tag_list),//json将其转换为字符串
                     csrfmiddlewaretoken:'{{ csrf_token }}'
                },
                dataType :"json",
                success:function (reg) {
                    console.log(reg);
                    if(reg.state){
                        // 添加博客成功,跳转首页
                        location.href="/blog/index"
                    }        
            }
        });}
    });

后端获取值与创建博客

def add(request):
    if request.method == "POST":
        tag_list = request.POST.get('tag_list')
        tag_list = json.loads(tag_list)
        author_id = request.session['member']['id']
        response = {"state": False, "errmsg": ""}
        # 上传新建博客
        response['state'] = True
        print(tag_list)
        Post.objects.create(author_id=author_id).tags.add(*tag_list)
        return HttpResponse(json.dumps(response))

数据库models设计

class Post(models.Model):
    title = models.CharField(max_length=100)
    tags = models.ManyToManyField(Tag, blank=True)


class Tag(models.Model):
    name = models.CharField(max_length=100)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值