# Docstatus
Frappe使用"Docstatus"的概念来跟踪交易的状态。Docstatus将始终具有以下三个值之一:
- 草稿(值:0)
- 已提交(值:1)
- 已取消(值:2)
不可提交的文档将始终处于"草稿"状态。可提交的文档可以从草稿状态选择性地进入"已提交"状态,然后进入"已取消"状态。
处于已提交和已取消状态的文档无法编辑,有一个例外:对于个别字段,我们可以明确允许编辑,即使文档处于已提交状态。
在后端代码中,我们有一个辅助类DocStatus,可以使用如下:
import frappe
from frappe.model.docstatus import DocStatus
draft_invoice_names = frappe.get_list(
"Sales Invoice",
filters={"docstatus": DocStatus.draft()},
pluck="name"
)
invoice_doc = frappe.get_doc("Sales Invoice", draft_invoice_names[0])
invoice_doc.docstatus == DocStatus.draft() # -> True
invoice_doc.docstatus.is_draft() # -> True
invoice_doc.docstatus.is_submitted() # -> False
invoice_doc.docstatus.is_cancelled() # -> False
invoice_doc.submit()
invoice_doc.docstatus == DocStatus.submitted() # -> True
invoice_doc.docstatus.is_draft() # -> False
invoice_doc.docstatus.is_submitted() # -> True
invoice_doc.docstatus.is_cancelled() # -> False
invoice_doc.cancel()
invoice_doc.docstatus == DocStatus.cancelled() # -> True
invoice_doc.docstatus.is_draft() # -> False
invoice_doc.docstatus.is_submitted() # -> False
invoice_doc.docstatus.is_cancelled() # -> True
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Docstatus作为整数值存储在数据库的每个Doctype表中。