一对一 出版社信息的增删改查
一对多 出版社信息与书籍信息的增删改查
多对多 书籍信息与作者信息的增删改查
建表
from django.db importmodelsclassPublisher(models.Model):
pid= models.AutoField(primary_key=True) #自增字段且设置为主键
name = models.CharField(max_length=32,unique=True) #设置唯一
def __str__(self):return "{}--{}".format(self.pid,self.name)classBook(models.Model):
name= models.CharField(max_length=32,unique=True)
pub= models.ForeignKey('Publisher',on_delete=models.CASCADE) #外键 要链接的类名可以直接写,也可以写在字符串内 级联删除
classAuthor(models.Model):
name= models.CharField(max_length=32)
books= models.ManyToManyField('Book') #多对多,生成第三张表
orm建表
一对一
1.设计URL
URL
2.写函数
from app01 importmodelsdefpublisher_list(request):'''展示数据'''
#获取数据库内所有出版社的数据
publishers = models.Publisher.objects.all().order_by('pid') #获取对象列表并按照pid字段排序
return render(request,'publisher_list.html',{'publishers':publishers}) #第三个参数是为了给html文件传值调用
defadd_publisher(request):'''新增数据'''
if request.method == 'POST':#获取提交的数据(括号内为input的name属性值),没有默认空字符串
new_name = request.POST.get('new_name','').strip()#设定输入不能为空
if notnew_name:return render(request,'add_publisher.html',{'err_msg':'输入不能为空','name':new_name})#设定不能与数据库现有数据重复
obj_list = models.Publisher.objects.filter(name=new_name) #在数据库中查询数据是否存在
if obj_list: #数据重复
return render(request, 'add_publisher.html', {'err_msg': '出版社名称已存在', 'name': new_name})#orm往数据库中写入数据
if new_name and notobj_list:
models.Publisher.objects.create(name=new_name)return redirect('/publisher_list/')#如果不是post请求,还是返回本页面
return render(request,'add_publisher.html')defdelete_publisher(request):'''删除数据'''
#找到需要删除的数据的id
pk = request.GET.get('pk')#通过id在数据库中找到对应的数据
obj = models.Publisher.objects.filter(pid=pk)#如果数据不存在(通过地址栏指定id进行删除)
if notobj:return HttpResponse('要编辑的数据不存在')#删除数据 返回展示页面
obj.delete()return redirect('/publisher_list/')defedit_publisher(request):#找到需要编辑的数据的id
pk = request.GET.get('pk')#通过id在数据库中找到对应的数据 对象列表]>
obj_list = models.Publisher.objects.filter(pk=pk)#如果数据不存在(通过地址栏指定id进行编辑)
if notobj_list:return HttpResponse('要编辑的数据不存在')#拿到数据 1--人民邮电出版社
obj =obj_list[0]
err_msg= ''
if request.method == 'POST':#获取用户输入的数据
new_name = request.POST.get('new_name','').strip()#设定输入不能为空,返回添加页面
if notnew_name:
err_msg= '输入不能为空'
#return render(request, 'edit_publisher.html', {'obj': obj, 'err_msg': '输入不能为空'})
#设定不能与数据库现有数据重复
obj_list = models.Publisher.objects.filter(name=new_name) #在数据库中查询数据是否存在
if obj_list: #有重复数据,返回添加页面
err_msg = '出版社名称已存在'
#return render(request, 'edit_publisher.html', {'obj': obj, 'err_msg': '出版社名称已存在'})
#修改数据
if new_name and notobj_list:
obj.name= new_name #在内存中修改
obj.save() #写入数据库
return redirect('/publisher_list/') #跳转到展示页面
return render(request,'edit_publisher.html',{'obj':obj,'err_msg':err_msg})return render(request, 'edit_publisher.html')
函数
3.写模板
在模板中 {% 逻辑 %} 表示逻辑{{ 变量 }},可以使用函数传的参数进行渲染
出版社信息序号ID名称操作
{% for foo in publishers %} #开始循环{{ forloop.counter }}{{ foo.pk }}{{ foo.name }} {% endfor %} #结束循环publisher_list
添加信息名称
{{ err_msg }}