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')
  • 相关阅读:
    Springboot如何优雅的解决ajax+自定义headers的跨域请求
    提升开发效率的一款mybatis开发神器
    深究Spring中Bean的生命周期
    阿里Canal框架(数据同步中间件)初步实践
    从技术角度分析推荐系统案例
    记一次token安全认证的实践
    为什么Redis 单线程却能支撑高并发?
    Python 派生类子类继承类
    Python 定制类与其对象的创建和应用
    Python 字典的创建赋值和动态扩展
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9549089.html
Copyright © 2011-2022 走看看