创建文档类型

DocType 类似于其他框架中的 Model(模型)。除了定义属性外,它还定义了模型的行为。

启用开发者模式

在创建 DocType 之前,我们需要在 bench 上启用开发者模式。这将允许我们在创建 DocType 时生成样板代码,并且我们可以通过应用将这些代码纳入版本控制。

打开终端,如果 bench 服务器已经在运行,请先停止它,然后从 frappe-bench 目录运行以下命令:

bench set-config -g developer_mode true
bench start

创建 DocType

在 Desk 中,使用 Awesomebar 导航到 DocType 列表。此列表将包含框架自带的 DocType、已安装的 Frappe 应用中的 DocType,以及您可以为每个站点创建的自定义 DocType。

我们要创建的第一个 DocType 是 Article。要创建它,请点击“新建”。

  1. 在“名称”字段中输入 Article
  2. 在“模块”字段中选择 Library Management
  3. 在“字段”表中添加以下字段:
  4. Article Name(数据,必填)
  5. Image(附件图像)
  6. Author(数据)
  7. Description(文本编辑器)
  8. ISBN(数据)
  9. Status(选择)- 输入两个选项:Issued 和 Available(输入 Issued,按回车,然后输入 Available)
  10. Publisher(数据)

请参考以下 GIF 了解具体操作步骤:

添加完字段后,点击“保存”。

您会在表单右上角看到一个 前往 Article 列表 按钮。点击它进入 Article 列表。这里您会看到一个空列表,因为表中还没有记录。

让我们创建一些记录。但在此之前,我们需要清除 Desk 缓存。点击导航栏右侧的 设置 下拉菜单,然后点击 重新加载

现在,您应该能看到 新建 按钮。点击它,您将看到 Article DocType 的表单视图。填写表单并点击“保存”。您就创建了第一个 Article 文档。返回列表视图,您应该能看到一条记录。

创建 Article DocType 时发生了什么?

1. 数据库表

系统创建了一个名为 tabArticle 的数据库表,其中包含我们在字段表中指定的字段。您可以通过 MariaDB 控制台检查来确认这一点。

bench --site library.localhost mariadb
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2445938
Server version: 10.4.13-MariaDB Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [_ad03fa1a016ca1c4]> desc tabArticle;
+--------------+--------------+------+-----+-----------+-------+
| Field        | Type         | Null | Key | Default   | Extra |
+--------------+--------------+------+-----+-----------+-------+
| name         | varchar(140) | NO   | PRI | NULL      |       |
| creation     | datetime(6)  | YES  |     | NULL      |       |
| modified     | datetime(6)  | YES  | MUL | NULL      |       |
| modified_by  | varchar(140) | YES  |     | NULL      |       |
| owner        | varchar(140) | YES  |     | NULL      |       |
| docstatus    | int(1)       | NO   |     | 0         |       |
| parent       | varchar(140) | YES  | MUL | NULL      |       |
| parentfield  | varchar(140) | YES  |     | NULL      |       |
| parenttype   | varchar(140) | YES  |     | NULL      |       |
| idx          | int(8)       | NO   |     | 0         |       |
| article_name | varchar(140) | YES  |     | NULL      |       |
| image        | text         | YES  |     | NULL      |       |
| author       | varchar(140) | YES  |     | NULL      |       |
| description  | longtext     | YES  |     | NULL      |       |
| isbn         | varchar(140) | YES  |     | NULL      |       |
| status       | varchar(140) | YES  |     | Available |       |
| publisher    | varchar(140) | YES  |     | NULL      |       |
| _user_tags   | text         | YES  |     | NULL      |       |
| _comments    | text         | YES  |     | NULL      |       |
| _assign      | text         | YES  |     | NULL      |       |
| _liked_by    | text         | YES  |     | NULL      |       |
+--------------+--------------+------+-----+-----------+-------+
21 rows in set (0.002 sec)

MariaDB [_ad03fa1a016ca1c4]>

我们以标题格式(Title Case)指定的字段会自动转换为小写蛇形命名(snake case),并用作表中的列名。例如,article_nameimageauthordescription

此外,还创建了许多其他字段,如 namecreationmodifiedmodified_by。这些是所有 DocType 都会创建的标准字段。name 是主键列。

如果您通过表单创建了一条记录,您也可以运行标准的 SELECT 查询来获取这些行。

MariaDB [_ad03fa1a016ca1c4]> select * from tabArticle;
+------------+----------------------------+----------------------------+---------------+---------------+-----------+--------+-------------+------------+-----+-----------------------------+--
| name       | creation                   | modified                   | modified_by   | owner         | docstatus | parent | parentfield | parenttype | idx | article_name                | i
+------------+----------------------------+----------------------------+---------------+---------------+-----------+--------+-------------+------------+-----+-----------------------------+--
| bd514646b9 | 2020-10-10 16:24:43.033457 | 2020-10-10 16:24:43.033457 | Administrator | Administrator |         0 | NULL   | NULL        | NULL       |   0 | The Girl with all the Gifts | N
+------------+----------------------------+----------------------------+---------------+---------------+-----------+--------+-------------+------------+-----+-----------------------------+--

MariaDB [_ad03fa1a016ca1c4]>

2. Desk 视图

系统还为我们的 DocType 创建了许多视图。Article 列表是显示数据库表记录的列表视图。表单视图是您创建新文档或查看现有文档时显示的视图。

3. 表单布局

如果您留意,表单中的字段布局是按照您在字段表中的排序方式排列的。例如,Article Name 是第一个字段,其次是 Image,然后是 Author。在教程的后续部分,我们将学习如何进一步自定义此布局。

4. 样板代码


注意

请确保在 DocType 配置中取消勾选“自定义?”复选框。否则,下面讨论的文件将不会生成。此处有相关解释。


如果您查看应用中的更改,应该会发现创建了许多文件。打开终端,从 frappe-bench 目录运行以下命令。

$ cd apps/library_management
$ git status -u
On branch master
Untracked files:
  (use "git add 
<file>..." to include in what will be committed)
    library_management/library_management/doctype/__init__.py
    library_management/library_management/doctype/article/__init__.py
    library_management/library_management/doctype/article/article.js
    library_management/library_management/doctype/article/article.json
    library_management/library_management/doctype/article/article.py
    library_management/library_management/doctype/article/test_article.py

nothing added to commit but untracked files present (use "git add" to track)
</file>

article.json – 定义 DocType 属性的 JSON 文件

article.js – 表单视图的客户端控制器

article.py – Article 的 Python 控制器

test_article.py – 用于编写测试的 Python 单元测试样板文件

如您所见,DocType 描述了模型的很多信息。它不仅定义了表和列名,还定义了它在 Desk 中各种视图中的呈现方式。

到目前为止,您很好地跟上了教程。让我们继续!

下一步:DocType 功能