经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
django 多对多表的创建和插入代码实现
来源:jb51  时间:2019/9/10 10:26:59  对本文有异议

这篇文章主要介绍了django-多对多表的创建和插入代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

表的创建

  1. # 作者和书籍之间的多对多关系
  2. class Author(models.Model):
  3. '''
  4. 作者表
  5. '''
  6. nid = models.AutoField(primary_key=True)
  7. name = models.CharField(verbose_name='作者名称',max_length=32)
  8. # 第一种方式直接在作者表中创建ManyToManyField字段(ORM会自动帮我们创建第三张表推荐这种方式)
  9. author2books = models.ManyToManyField(to='Books')
  10. class Books(models.Model):
  11. '''
  12. 书籍名称
  13. '''
  14. nid = models.AutoField(primary_key=True)
  15. title = models.CharField(verbose_name='书本名称',max_length=32)
  16. pid = models.ForeignKey(verbose_name='出版社ID',to='Press',to_field='nid',on_delete=models.CASCADE)
  17. # 第二钟方式手动创建第三张表
  18. # class Books2Author(models.Model):
  19. # '''
  20. # 书本作者对应表
  21. # '''
  22. # nid = models.AutoField(primary_key=True)
  23. # aid = models.ForeignKey(verbose_name='作者ID',to='Author',to_field='nid')
  24. # bid = models.ForeignKey(verbose_name='书籍ID',to='Books',to_field='nid')

数据的添加

  1. # 编辑作者
  2. def edit_author(request):
  3. # 获取作者ID
  4. id = request.GET.get('id')
  5. # 获取所有书籍
  6. books_lst = models.Books.objects.all()
  7. # 根据作者ID 获取到作者对象
  8. author_info = models.Author.objects.filter(pk=id).first()
  9. if request.method == 'POST':
  10. # 获取前端传过来的作者新名称
  11. name = request.POST.get('name')
  12. # 获取前端传递过来的书籍
  13. book_lst = request.POST.getlist('books')
  14. # 根据新名称,更新当前名称
  15. author_info.name = name
  16. # 保存数据
  17. author_info.save()
  18. # set方法会将当前作者原先的书籍全部删除,然后插入前端传递过来的书籍列表(参数为list类型)
  19. author_info.author2books.set(book_lst)
  20. # add方法会将前端传递过来书籍添加到 作者和书籍的对应表中。如果插入重复记录会报错(参数为单个元素,可以插入多个)
  21. # author_info.author2books.add(*book_lst)
  22. return redirect('/author_lst/')
  23. return render(request,'edit_author.html',{'books_lst':books_lst,'author_info':author_info})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号