当前位置: 首页 > 编程笔记 >

django 多对多表的创建和插入代码实现

李捷
2023-03-14
本文向大家介绍django 多对多表的创建和插入代码实现,包括了django 多对多表的创建和插入代码实现的使用技巧和注意事项,需要的朋友参考一下

这篇文章主要介绍了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})

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

 类似资料:
  • 问题内容: 我们已经为此苦苦挣扎了几天,并在网络上进行了大量搜索。 我们试图弄清楚条目如何以Django形式保存到许多字段。 例如,我们有一个新闻模型,该模型与图像具有多对多的关系。当我们将图像添加到新闻文章中时,例如ID为10、2、14的图像,我们可以看到保存新闻文章表单时的帖子值如下: photos 10 photos 2 photos 14 当我们查看多对多交叉表时,顺序没有保留。我们看不到

  • 本文向大家介绍Django 多对多字段的更新和插入数据实例,包括了Django 多对多字段的更新和插入数据实例的使用技巧和注意事项,需要的朋友参考一下 表的普通字段 一对多字段 多对多字段 插入数据 表的普通字段 一对多字段 多对多字段 修改数据 补充知识:Django的ManyToManyField(多对多)的使用以及through的作用 创建一个经典的多对多关系:一本书可以有多个作者,一个作者

  • 本文向大家介绍django多对多表的创建,级联删除及手动创建第三张表,包括了django多对多表的创建,级联删除及手动创建第三张表的使用技巧和注意事项,需要的朋友参考一下 创建一张作者表,author,创建外键与book表,多对多关系 ,外键字段放在那张表都可以, 在book表里,关联Author表,Author就要放在book表上面, 关联的表Author加上引号是字符串,是一个查询过程,等加载

  • 我有下表,目前我可以更新用户对象来添加或删除角色,但我不能在创建新用户时向其添加角色(用户的角色添加到UI上的同一表单上),因为中间表User_Role希望用户的ID为Obj,所以在插入时,我自然得到一个User.user_id=?。 有什么常见的方法可以解决这个问题吗?我在考虑也许尝试在保存后获取插入用户的ID,然后调用更新函数。我不想这样做,因为我担心性能,特别是在未来可能发生批量上传的时候。

  • 问题内容: 我试图加快我的代码的速度,瓶颈似乎是通过ODBC从外部Access到Jet MDB的单独插入语句。我需要一次插入100行,并且必须重复多次。 是否可以使用SQL代码在表中插入多行?这是我尝试过的一些方法,但是它们都不起作用。有什么建议? 问题答案: 我在R(我正在使用的软件)中找到了一个优雅的解决方案。RODBC软件包具有函数sqlSave,该函数允许一次将整个data.frame追加

  • 问题内容: 我有一个使用此架构的BigQuery表: 我可以使用以下代码成功插入表格中: 这行得通,因为该表已经在bigquery上创建,我现在要做的就是删除该表(如果存在)并从代码中再次创建它: 这也非常好用,因为要删除表并使用我的结构测试中的推断模式创建表。 当我尝试在删除/创建过程之后执行上述插入操作时,问题就来了。没有引发任何错误,但是它没有插入数据(如果我注释了删除/创建部分,则插入工作