zoukankan      html  css  js  c++  java
  • django-多对多表的创建和插入

    表的创建

    # 作者和书籍之间的多对多关系    
    class Author(models.Model):
        '''
        作者表
        '''
        nid = models.AutoField(primary_key=True)
        name = models.CharField(verbose_name='作者名称',max_length=32)
        # 第一种方式直接在作者表中创建ManyToManyField字段(ORM会自动帮我们创建第三张表推荐这种方式)
        author2books = models.ManyToManyField(to='Books')
    
    
    
    class Books(models.Model):
        '''
        书籍名称
        '''
        nid = models.AutoField(primary_key=True)
        title = models.CharField(verbose_name='书本名称',max_length=32)
        pid = models.ForeignKey(verbose_name='出版社ID',to='Press',to_field='nid',on_delete=models.CASCADE)
    
    # 第二钟方式手动创建第三张表
    # class Books2Author(models.Model):
    #     '''
    #     书本作者对应表
    #     '''
    #     nid = models.AutoField(primary_key=True)
    #     aid = models.ForeignKey(verbose_name='作者ID',to='Author',to_field='nid')
    #     bid = models.ForeignKey(verbose_name='书籍ID',to='Books',to_field='nid')

    数据的添加

    # 编辑作者
    def edit_author(request):
        # 获取作者ID 
        id = request.GET.get('id')
        # 获取所有书籍
        books_lst = models.Books.objects.all()
        # 根据作者ID 获取到作者对象
        author_info = models.Author.objects.filter(pk=id).first()
    
        if request.method == 'POST':
            # 获取前端传过来的作者新名称
            name = request.POST.get('name')
            # 获取前端传递过来的书籍
            book_lst = request.POST.getlist('books')
            # 根据新名称,更新当前名称
            author_info.name = name
            # 保存数据
            author_info.save()
            # set方法会将当前作者原先的书籍全部删除,然后插入前端传递过来的书籍列表(参数为list类型)
            author_info.author2books.set(book_lst)
            # add方法会将前端传递过来书籍添加到 作者和书籍的对应表中。如果插入重复记录会报错(参数为单个元素,可以插入多个)
            # author_info.author2books.add(*book_lst)
            return redirect('/author_lst/')
    
        return render(request,'edit_author.html',{'books_lst':books_lst,'author_info':author_info})
  • 相关阅读:
    SpringBoot整合阿里云OSS
    UVALive
    HDU 5794 A Simple Chess dp+Lucas
    数论
    UVALive
    UVALive
    HDU 5792 World is Exploding 树状数组+枚举
    UVALive
    UVALive
    UVALive
  • 原文地址:https://www.cnblogs.com/wtil/p/11480784.html
Copyright © 2011-2022 走看看