Search code examples
pythonflasksqlalchemyflask-admin

Flask-Admin: How to get the object being edited in validate_form


I am trying to implement custom validation in the edit form. However, I don't know how to obtain the object that is being edited in the method validate_form.

class ShiftModelView(ModelView):
    """ModelView to manage Shift model."""

    def validate_form(self, form) -> bool:
        """Validate form."""
        if not super().validate_form(form):
            return False

        if form.scheduled_from.data >= form.scheduled_to.data:
            message = (
                "'Scheduled From' cannot be greater than or equal to 'Scheduled To'"
            )
            flash(message, "error")
            return False
        # HERE I NEED THE OBJECT THAT IS BEING EDITED

How can I achieve this?


Solution

  • The form has a protected member _obj that is the current object being edited.

    def validate_form(self, form) -> bool:
        """Validate form."""
        if not super().validate_form(form):
            return False
    
        if form.scheduled_from.data >= form.scheduled_to.data:
            message = (
                "'Scheduled From' cannot be greater than or equal to 'Scheduled To'"
            )
            flash(message, "error")
            return False
    
        # HERE I NEED THE OBJECT THAT IS BEING EDITED
        
        print(form._obj)