Day11 - 模型与管理网站

今天内容主要为实作模型和使用Django提供的管理网站进行资料操作。

模型

设计模型

今天将建立两个资料模型,其中Author和Book为一对多的关系:

  • Book
  • Author
  1. 开启应用程序资料夹(../专案资料夹/track/)下的models.py。

  2. 新增以下程序 (Book模型):

from uuid import uuid4
from datetime import datetime

class Book(models.Model):
  bookid = models.UUIDField(primary_key=True, default=uuid4(), auto_created=True, editable=False)
  authorid = models.ForeignKey('Author', on_delete=models.SET_NULL, null=True)
  title = models.CharField(max_length=20)
  oriurl = models.CharField(max_length=100, help_text="Enter URL")
  totalsection = models.IntegerField(default=0)
  BOOK_STATUS = (
    ('s', '连载'),
    ('e', '完结'),
    ('u', '未知')
  )

  bookstatus = models.CharField(max_length=1, choices=BOOK_STATUS, default = 'u')
  istrack = models.BooleanField(default=False)
  updatetime = models.DateTimeField(default=datetime.now(), editable=False)

  class Meta:
    ordering = ['bookid']

  def __str__(self):
    return self.title
  • Field

    • bookid:书籍id,primary key,使用GUID,在新增资料时由系统自动产生,不可由使用者编辑。

    • authorid:作者id,为Author模型的foreign key,可允许空值,当该作者id於Author被删除时会自动改为空值。

    • title:书名,最大长度为20。

    • oriurl:小说网址,最大长度为100

    • totalsection:总章节数,预设为0

    • bookstatus:连载状态,使用BOOK_STATUS (Tuple)为选项,预设为「u」(未知)。

    • istrack:是否列入追踪

    • updatetime:资料更新时间,不可由使用者编辑

  • Meta

    • 使用bookid排序
  • def

    • str:用来表示该模型的物件名称,在Book模型中将回传书名。
  1. 新增以下程序 (Author模型):
class Author(models.Model):
  authorid = models.UUIDField(primary_key=True, default=uuid4(), auto_created=True, editable=False)
  authorname = models.CharField(max_length=30)
  
  class Meta:
    ordering = ['authorid']

  def __str__(self):
    return self.authorname
  • Field

    • authorid:作者id,使用GUID,在新增资料时由系统自动产生,不可由使用者编辑。

    • authorname:作者名称,最大长度为30。

  • Meta

    • 根据authorid排序
  • def

    • str:用来表示该模型的物件名称,在Author模型中将回传作者名称。

执行Database Migrate

这个动作,会根据专案的模型,於资料库中做对应的更新。

python manage.py makemigrate
python manage.py migrate
  • makemigrate:根据异动的model内容,产生对应的程序於migration资料夹下。

  • migrate:使用makemigrate产生的程序码,实际於资料库做异动。

执行完以上指令後,实际连线到MySQL资料库中,可以看到新建立了track_book和track_author。
https://ithelp.ithome.com.tw/upload/images/20210923/20141886eVb4O9rtkB.png

管理网站

Django内建的管理网站,可以提供基础的资料管理和权限管理功能,对於一个简单的系统而言,可以省去另外架设後台网站的人力。

注册模型

为了能使用管理网站进行资料操作,需要先将模型注册在管理网站中进行注册。

开启应用程序资料夹(../专案资料夹/track/)下的admin.py,加入以下程序:

from .models import Book, Author

admin.site.register(Book)
admin.site.register(Author)

建立一个superuser帐号

为了能简化後续测试流程,建立一个superuser帐号以登入管理网站。

python manage.py createsuperuser

使用管理网站

进行此阶段时须先启动服务器。

python manage.py runserver
  1. 使用浏览器开启管理网站 (这边使用的是 http://127.0.0.1:8000/admin ),使用帐号登入後可以看到管理介面,分为权限管理和Track的模型管理两个区块。
    https://ithelp.ithome.com.tw/upload/images/20210923/20141886SIUkZCVDb9.png

  2. 在模型管理中,提供资料的增删读写功能,而画面中各栏位的呈现会和model中的属性设定有关。
    https://ithelp.ithome.com.tw/upload/images/20210923/20141886DvTK4g3heG.png


<<:  Day11-D3 Mouse Event 滑鼠事件

>>:  【Side Project】 顾客点菜单画面设计2-Bootstrap

Day 20 2D Arrays

在Java程序设计中,有时一维阵列无法计算较多且较复杂的,这时我们需要二维阵列,例如要产生一个阵列A...

[Day 26] Final Project (2/5) — 准备开始

接下来几天的文章会像料理节目一样,用我事先准备好的材料 (模型、App...) 来进行说明,底下就来...

AI ninja project [day 3] AI RPA系统--名片前处理篇

当开始与许多厂商联系, 认识了越来越多人, 自然而然会累积许多名片。 要是未来希望能搜寻特定厂商的特...

Day 24 - 影像处理篇 - 用Canvas实作动态绿幕抠像 - 成为Canvas Ninja ~ 理解2D渲染的精髓

上一篇我们提到我们接着要开始玩一些比较有趣的实作~ 所以我们就来讲讲怎麽在web端实作绿幕抠像(Gr...

[Day8]Where子句实作

在HR的EMPLOYEES资料表中,查询2003年6月17日到职的员工姓名及工作部门代码。 SEL...