zoukankan      html  css  js  c++  java
  • 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')
  • 相关阅读:
    什么是内存(一):存储器层次结构
    关于跨平台的一些认识
    适合小白/外行的git与github最基础最浅显教程
    Android动画(二)-属性动画
    Android动画(一)-视图动画与帧动画
    View学习(四)-View的绘制(draw)过程
    View学习(三)- View的布局(layout)过程
    View学习(二)-View的测量(measure)过程
    View学习(一)-DecorView,measureSpec与LayoutParams
    wcf的诡异问题
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9549089.html
Copyright © 2011-2022 走看看