Django -- 一对多建表增删改查
一对多表结构
ForeignKey -- 设置外键与另一张表关联
class Book(models.Model): title = models.CharField(max_length=32) pub = models.ForeignKey('Publisher', on_delete=models.CASCADE) # 外键 -- 关联表另一张表
查询
all_books = models.Book.objects.all() # 获取所有的数据 print(all_books) for book in all_books: print(book) # 得到一个数据对象 print(book.pk) # 数据对象的主键ID print(book.title) # 数据对象的title字段的值 print(book.pub, type(book.pub)) # 外键关联的对象 print(book.pub_id, type(book.pub_id)) # 外键关联的对象的ID
新增
def book_add(request): if request.method == 'POST': # 判断请求方法 title = request.POST.get('title') # 通过input框的name='title'属性获取value值(输入内容) pub_id = request.POST.get('pub_id') # 同上 # models.Book.objects.create(title=title, pub=models.Publisher.objects.get(pk=pub_id)) models.Book.objects.create(title=title, pub_id=pub_id) # 同步到数据库,(数据库字段=获取的值) return redirect('/book_list/') # 重定向,跳转页面
删除
def book_del(request): pk = request.GET.get('pk') # 获取url中 pk对应的value值 models.Book.objects.filter(pk=pk).delete() # 比较Book表中的pk值与获取url的pk值,相同就删除 return redirect('/book_list/')
编辑
def book_edit(request): pk = request.GET.get('pk') # 获取发送GET请求对应的pk值 book_obj = models.Book.objects.filter(pk=pk).first() # 获取pk值对应数据对象 if request.method == 'POST': title = request.POST.get('title') # input框中name='title'属性对应的value值 pub_id = request.POST.get('pub_id') book_obj.title = title # 修改book表数据对象的值 book_obj.pub_id = pub_id # 通过pub_id获取到option的value值,并修改book表中的值,(pub_id外键对应publisher表中的pk值对应的数据) book_obj.save() # 提交数据 return redirect('/book_list/')