一、创建数据库表
1、自定义关系表
#使用外键关联,想关联几个关联几个
user_group = models.ForeignKey("UserGroup",on_delete=models.CASCADE,to_field='uid',default=1)
2、自动创建关系表
#只能关联2个
#无法直接对第三张表操作
class Application(models.Model):
name = models.CharField(max_length=32)
r = models.ManyToManyField("Host")
间接查找:
1、定义表结构和关系,会生成第三张表
class host(models.Model):
hostname = models.CharField(max_length=32)
port = models.IntegerField()
class application(models.Model):
appname = models.CharField(max_length=32)
host_to = models.ManyToManyField("host")
2、 获取表数据
host_group = models.application.objects.all()
print(host_group)
for i in host_group:
print(i.appname,i.host_to.all())
return render(request,'host_info.html',{"host_group":host_group})
3、 传递给前端
#第一个循环获取application 表中appname
{% for op in host_group %}
<tr>
<td>{{ op.appname }}</td>
<td>
#第二个循环获取application表中appname具体对应多少值
{% for i in op.host_to.all %}
<span>{{ i.hostname }}</span>
{% endfor %}
</td>
<td>{{ op.port }}</td>
</tr>
{% endfor %}
二 数据库操作
1、获取及添加数据库信息
def host_info(request): if request.method == "GET": host_group = models.application.objects.all() host_list = models.host.objects.all() return render(request,'host_info.html',{"host_group":host_group,"host_list":host_list}) if request.method == "POST": group_name = request.POST.get('group_name') host_name = request.POST.getlist('host_name') obj = models.application.objects.create(appname=group_name) print(obj) obj.host_to.add(*host_name) return redirect("/host_info")
2、删除数据
1、获取要删除的id,后删除
<a href="/del_list-{{ op.id }}.html">删除</a>
def del_list(request,nid): models.application.objects.filter(id=nid).delete() return redirect('/host_info')
3、更新数据
1、获取数据的id
2、获取前端提交的数据已name 为依据
<form action="/edit_list-{{ obj.id }}.html" method="post" id="add_form" > <input type="text" name="nid" style="display: none" value="{{ obj.id }}"/> <input type="text" name="user" value="{{ obj.appname }}"/> <select name="group_id" id="l2" multiple> {% for op in host_list %} <option value="{{ op.id }}">{{ op.hostname }}</option> {% endfor %} </select> <input id="ajxe_host" type="submit" value="提交"> </form>
3、修改数据库
def edit_list(request,nid): if request.method == "GET": obj = models.application.objects.get(id=nid) host_list = models.host.objects.all() return render(request,"edit_host.html",{"obj":obj,"host_list":host_list}) if request.method == "POST": h = request.POST.get('user') i = request.POST.getlist('group_id') models.application.objects.filter(id=nid).update(appname=h) obj = models.application.objects.get(id=nid) obj.host_to.clear() obj.host_to.add(*i) return redirect('/host_info')