Mike Z
Mike Z

Reputation: 1

How to delete one record using frappe.db.delete syntax?

I’m looking to use frappe.db.delete to remove the most recently modified record in a custom table, Warehouse Locations. I want to limit the delete to only one record that matches some filters.

The table is a child table, if that matters.

I am not clear on how to filter one record, based on the “modified” value. I tried:

frappe.db.delete(‘Warehouse Locations’,
  {“warehouse”: warehouse,
  “parent”: item_code,
  “shelf”: shelf,
  “modified”:("=",last_record_to_keep[0].modified)})

I am getting a syntax error when I run the above query.

Upvotes: 0

Views: 3180

Answers (2)

Zeng-yan Zhu
Zeng-yan Zhu

Reputation: 11

I think the solution answered by @ChillarAnand is helpful.

Instead, I would like to give a different way to solve the problem you faced. Per your question, the goal is to delete only one record from Warehouse Locations (Child Table).

    # 1. Get the parent document for the warehouse location.
    parent_doc = frappe.get_doc("Doctype", docname)
    # 2. iterate through the child table rows to find the row meet your filter
    # and assign to row_to_detele for late use or you can delete straight away
    row_to_delete = ""
    for row in parent_doc.warehouse_locations:
        if row.modified == last_record_to_keep[0].modified:
            row_to_delete = row.name
            break

    # 3. to remove the child table from the parent doc method
    parent_doc.remove(row_to_delete)
    

For the document of parent_doc.remove(), you can find it through the below github path: https://github.com/frappe/frappe/blob/6b91ade73c07dc1c070ed137cf54a29a3e7b0993/frappe/model/base_document.py#L210 (7 Oct, 2021)

Upvotes: 1

Chillar Anand
Chillar Anand

Reputation: 29514

First, filter out the record to be deleted using ORM by running

record = frappe.get_list('Warehouse Locations', order_by='-modified')[0]

Once you filtered it out, you can delete it using frappe.db.delete.

frappe.db.delete('Warehouse Locations', record)

Upvotes: 1

Related Questions