Back to Top

How to create Doctypes in ERPNext

Updated 15 September 2023

In this blog, we will learn how to create new doctypes in ERPNext.

DocType is similar to a Model in other frameworks (like odoo).

When we create doctypes in ERPNext, then database table with the same name gets created (with tab prefix)

e.g – If the doctype name is Library -> the db table name will be tabLibrary

The directory structure for doctypes:-

Start your headless eCommerce
now.
Find out More
library_management/library_management/doctype/__init__.py

    library_management/library_management/doctype/library/__init__.py

    library_management/library_management/doctype/library/library.js

    library_management/library_management/doctype/library/library.json

    library_management/library_management/doctype/library/library.py

    library_management/library_management/doctype/library/test_library.py

library.json:- JSON file that defines the doctype attributes and fields(table columns)

library.js:- Client-side controller for the Form view

library.py:- Python controller (server side) for library doctype

test_library.py:- Python Unit Test boilerplate for writing tests

library.json

** (This file creates the doctype) **

{
  "autoname": "format: PS-{####}",
  "doctype": "DocType",
  "fields": [
    {
      "fieldname": "section1",
      "fieldtype": "Section Break",
      "label": "Section 1"
  },
  {
   "fieldname": "field_1",
   "fieldtype": "Data",
   "in_list_view": 1,
   "label": "Field 1 Label",
   "reqd": 1
  },
  {
   "fieldname": "column_break1",
   "fieldtype": "Column Break",
   "label": ""
  },
  {
   "fieldname": "field_2",
   "fieldtype": "Select",
   "in_list_view": 1,
   "label": "Field 2 Label",
   "options": "option1\option2",
   "reqd": 1
  }
 ],
 "module": "library_management",
 "name": "Doctype Name",
 "owner": "Administrator",
 "permissions": [
  {
   "amend": 0,
   "cancel": 0,
   "create": 1,
   "delete": 1,
   "email": 1,
   "export": 1,
   "if_owner": 0,
   "import": 0,
   "permlevel": 0,
   "print": 1,
   "read": 1,
   "report": 1,
   "role": "System Manager",
   "set_user_permissions": 0,
   "share": 1,
   "submit": 0,
   "write": 1
  },
  {
    "amend": 0,
    "cancel": 0,
    "create": 1,
    "delete": 0,
    "email": 0,
    "export": 0,
    "if_owner": 0,
    "import": 0,
    "permlevel": 0,
    "print": 0,
    "read": 1,
    "report": 0,
    "role": "All",
    "set_user_permissions": 0,
    "share": 0,
    "submit": 0,
    "write": 1
   }
 ],
 "quick_entry": 1,
 "show_name_in_global_search": 1,
 "sort_field": "field1",
 "sort_order": "DESC",
 "title_field": "field1",
 "track_changes": 1,
 "track_seen": 1,
 "track_views": 1
}

library.py

** (This file contains business logic for particular doctype) **

import frappe

from frappe.model.document import Document

class Library(Document):

    def before_save(self):

        # code to execute before saving a library record #

library.js

** (This file contains the js code for the form view) **

frappe.ui.form.on('Library', {

    refresh: function(frm) {                 

        // refresh method will run every time a form is refreshed

        // frm if the form object

    }

});

Read how to create a new app in ERPNext- App Creation and App installation process in ERPNext

Single doctypes in ERPNext

When a DocType has Is Single enabled, it becomes a Single DocType.

It does not create a new database table. All single values stored in the tabSingles table. You can use it for storing global settings.

We will use `frappe.db.get_single_value(doctype_name, field_name)` method to get the value of a field from the single doctype.

NEED HELP?

Hope you find the guide helpful! Please feel free to share your feedback in the comments below.

If you still have any issues/queries regarding the same, please raise a ticket at https://webkul.uvdesk.com/en/customer/create-ticket/.

Also, please explore our Odoo development services & an extensive range of quality Odoo Apps.

For any doubt, contact us at [email protected].

Thanks for paying attention!!

. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


Be the first to comment.

Back to Top

Message Sent!

If you have more details or questions, you can reply to the received confirmation email.

Back to Home