Django的ORM主外键约束实现


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

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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM