创建两个数据表类,并实现主外键关联(出版社与图书 一对多关系)

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')