您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)使用django怎么創(chuàng)建一個(gè)多對(duì)多表,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
表的創(chuàng)建
# 作者和書籍之間的多對(duì)多關(guān)系 class Author(models.Model): ''' 作者表 ''' nid = models.AutoField(primary_key=True) name = models.CharField(verbose_name='作者名稱',max_length=32) # 第一種方式直接在作者表中創(chuàng)建ManyToManyField字段(ORM會(huì)自動(dòng)幫我們創(chuàng)建第三張表推薦這種方式) 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) # 第二鐘方式手動(dòng)創(chuàng)建第三張表 # class Books2Author(models.Model): # ''' # 書本作者對(duì)應(yīng)表 # ''' # 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')
數(shù)據(jù)的添加
# 編輯作者 def edit_author(request): # 獲取作者ID id = request.GET.get('id') # 獲取所有書籍 books_lst = models.Books.objects.all() # 根據(jù)作者ID 獲取到作者對(duì)象 author_info = models.Author.objects.filter(pk=id).first() if request.method == 'POST': # 獲取前端傳過(guò)來(lái)的作者新名稱 name = request.POST.get('name') # 獲取前端傳遞過(guò)來(lái)的書籍 book_lst = request.POST.getlist('books') # 根據(jù)新名稱,更新當(dāng)前名稱 author_info.name = name # 保存數(shù)據(jù) author_info.save() # set方法會(huì)將當(dāng)前作者原先的書籍全部刪除,然后插入前端傳遞過(guò)來(lái)的書籍列表(參數(shù)為list類型) author_info.author2books.set(book_lst) # add方法會(huì)將前端傳遞過(guò)來(lái)書籍添加到 作者和書籍的對(duì)應(yīng)表中。如果插入重復(fù)記錄會(huì)報(bào)錯(cuò)(參數(shù)為單個(gè)元素,可以插入多個(gè)) # 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怎么創(chuàng)建一個(gè)多對(duì)多表了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。