'How to update mark a form dirty after a server side modification

I don't understand how to make the Client ui aware of a server side change in a document.

My use case is the following : I'm adding a button to my form, that calls a custom document method : The custom button

In MyDocType.py, I have :

class MyDocType(Document):

    @frappe.whitelist()
    def change_some_value_in_doc(self):

        self.the_field_i_want_to_change = 50

It work in the sense that the_field_i_want_to_change is immediately updated to the new value.

However, If I hit Save, I get the message "No changes in document". I managed to determine that this is because on the JS side, the form is not marked as "dirty", but despite reading the documentation over and over, I cannot find the right way.

I tried with self.notify_update() which seems to have no effect.

Is it a bug ? Or am I misunderstanding how this is supposed to work ?

I'm using frappe v 14.0.0-beta.3

[EDIT]

Actually, I realized that doing

class MyDocType(Document):

    @frappe.whitelist()
    def change_some_value_in_doc(self):

        self.the_field_i_want_to_change = 50
        self.save()

Does work in the sense that it save the new value, but it's not exactly what I'm looking for, because my purpose is actually to pre-fill some data with the custom method and leave to the user to complete before saving...

Any help to get me in the right direction would be very appreciated.



Solution 1:[1]

To pre-fill data in your form - that you want the user to confirm before saving to the database, you should use client-side scripting (in JS). Changing the value on the server is not going to help you since you want the user to get pre-filled values before inserting a record in the database.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nikhil Kothari