创建两个数据表类,并实现主外键关联(出版社与图书 一对多关系)
1 #创建一个出版社类
2 class Press(models.Model):
3 id =models.AutoField(primary_key=True), #自增型主键
4 name=models.CharField(max_length=30,null=False,unique=True) #varchar 30 非空且唯一
5
6 class Book(models.Model):
7 bid=models.AutoField(primary_key=True)
8 bname=models.CharField(max_length=48,null=False,unique=True)
9 press=models.ForeignKey(to='Press') #外键关系 是一个press对象
查询有主外键关系的book表时,可以直接调press对象下的name属性 也可以调id
1 {% for foo in book %}
2 <tr>
3 <td>{{ foo.bid }}</td>
4 <td>{{ foo.bname }}</td>
5 <td>{{ foo.press.name }}</td>
6 <td>
7 <a href="/del_book/?id={{ foo.bid }}">删除</a>
8 <a href="/edit_book/?id={{ foo.bid }}">编辑</a>
9 </td>
10 </tr>
11 {% endfor %}
有些时候查询到的结果希望能编辑,又不想被胡乱修改可以使用下拉列表select
1 出版社:<select name="pre">
2 {% for foo in press %}
3 <option value="{{ foo.id}}">{{ foo.name }}</option>
4 {% endfor %}
5
6 </select>
此时后台在来获取pre,取到的其实就是value的值
用Django自带模板创建数据库表的操作:
一对多用:主外键
多对多用:第三张表来标记关系
1 class Student(models.Model):
2 sid=models.AutoField(primary_key=True)
3 sname=models.CharField(max_length=32,null=False,unique=True)
4 grade=models.ForeignKey(to='Grade')
5
6
7 class Grade(models.Model):
8 gid = models.AutoField(primary_key=True)
9 gname = models.CharField(max_length=48, null=False, unique=True)
10
11
12 class Teacher(models.Model):
13 tid = models.AutoField(primary_key=True)
14 tname = models.CharField(max_length=32, null=False, unique=True)
15 grade=models.ManyToManyField(to='Grade')
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django的ORM主外键约束实现 - Python技术站