表结构设计

上篇我们实现了出版社的增删改查,出版社数据表有两个字段id和name,那图书的表结构怎么设计呢?图书也要有一个主键id,还要有一个名称title,是哪个出版社的,要有个字段press和Press表里的id对应,这样图书就需要三个字段,id,title,press

创建表

# 图书表
class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)  # 书名
    press = models.ForeignKey(to='Press',on_delete=models.CASCADE)  # 和出版社表关联的字段

因为书和出版社是多对一的关系,一个出版社可以出版多个书,所以外键要写在多的这张表里面,也就是Book表里面

然后执行

python manage.py makemigrations
python manage.py migrate

说明:to='Press' 默认关联的是Press下的主键,on_delete=models.CASCADE级联删除,也就是如果你删除了出版社,Django会把你这个出版社关联的书都删掉。当然你也可以设置成null或者其他的默认值,不需要删除书。Django1.11中,默认就是级联删除,Django2.0之后必须指定on_delete 

to=关联的表名,默认关联表里的主键,还有就是我们的字段是press,但是ORM在操作的时候,会在后面加上_id,在数据库里查看字段显示如下

django -- ORM实现图书增删改查

获取表里的数据

我们往数据表里手动加些数据

url(r'^book_list/', views.book_list),  # 展示图书列表

在去添加对应的函数

#获取图书列表返回给页面
def book_list(request):
    #查询所有的书籍
    data = Book.objects.all()
    return render(request, 'book_list.html', {"data":data})

添加book_list.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书列表</title>
</head>
<body>
    <table border="1">
        <thead>
            <tr>
                <th>序号</th>
                <th>书ID</th>
                <th>书名</th>
                <th>出版社名</th>
            </tr>
        </thead>

        <tbody>
            {% for i in data %}
                <tr>
                    <td>{{ forloop.counter }}</td>
                    <td>{{ i.id }}</td>
                    <td>{{ i.title}}</td>
                    <td>{{ i.press.name }}</td>
                </tr>
            {% endfor %}

        </tbody>
    </table>

</body>
</html>
book_list.html

相关文章:

  • 2022-03-06
  • 2021-12-01
  • 2022-12-23
  • 2022-12-23
  • 2019-10-07
  • 2022-02-07
  • 2022-01-10
  • 2022-12-23
猜你喜欢
  • 2021-12-22
  • 2022-12-23
  • 2021-06-14
  • 2022-12-23
  • 2021-11-14
  • 2021-05-23
相关资源
相似解决方案