| 363 | === Keeping control of your objects === |
| 364 | |
| 365 | We have seen how easy is to define a class and its properties, and below we will see how easy it is to then use these classes in the client code. |
| 366 | |
| 367 | The framework will handle all of the burden of fetching the database rows, populating the object, keeping track of the changes, saving it when you want to, and so on. |
| 368 | |
| 369 | Anyway, there may be cases where you want to keep control on what's being done, and perhaps prevent some of these operations to occur, based on your own logic. |
| 370 | |
| 371 | This can be easily achieved by overriding some methods: |
| 372 | * The "pre" methods get called before performing the corresponding operation. You can return True or False to allow, or deny, the operation to be performed, respectively. |
| 373 | * The "post" methods get called after the corresponding operation has been performed, before the transaction is committed. They give you the opportunity to perform further custom work in the context of the same operation. |
| 374 | |
| 375 | The following is the list of such methods, from the !AbstractVariableFieldsObject class documentation. |
| 376 | |
| 377 | {{{ |
| 378 | def pre_fetch_object(self, db): |
| 379 | """ |
| 380 | Use this method to perform initialization before fetching the |
| 381 | object from the database. |
| 382 | Return False to prevent the object from being fetched from the |
| 383 | database. |
| 384 | """ |
| 385 | return True |
| 386 | |
| 387 | def post_fetch_object(self, db): |
| 388 | """ |
| 389 | Use this method to further fulfill your object after being |
| 390 | fetched from the database. |
| 391 | """ |
| 392 | pass |
| 393 | |
| 394 | def pre_insert(self, db): |
| 395 | """ |
| 396 | Use this method to perform work before inserting the |
| 397 | object into the database. |
| 398 | Return False to prevent the object from being inserted into the |
| 399 | database. |
| 400 | """ |
| 401 | return True |
| 402 | |
| 403 | def post_insert(self, db): |
| 404 | """ |
| 405 | Use this method to perform further work after your object has |
| 406 | been inserted into the database. |
| 407 | """ |
| 408 | pass |
| 409 | |
| 410 | def pre_save_changes(self, db): |
| 411 | """ |
| 412 | Use this method to perform work before saving the object changes |
| 413 | into the database. |
| 414 | Return False to prevent the object changes from being saved into |
| 415 | the database. |
| 416 | """ |
| 417 | return True |
| 418 | |
| 419 | def post_save_changes(self, db): |
| 420 | """ |
| 421 | Use this method to perform further work after your object |
| 422 | changes have been saved into the database. |
| 423 | """ |
| 424 | pass |
| 425 | |
| 426 | def pre_delete(self, db): |
| 427 | """ |
| 428 | Use this method to perform work before deleting the object from |
| 429 | the database. |
| 430 | Return False to prevent the object from being deleted from the |
| 431 | database. |
| 432 | """ |
| 433 | return True |
| 434 | |
| 435 | def post_delete(self, db): |
| 436 | """ |
| 437 | Use this method to perform further work after your object |
| 438 | has been deleted from the database. |
| 439 | """ |
| 440 | pass |
| 441 | |
| 442 | def pre_save_as(self, old_key, new_key, db): |
| 443 | """ |
| 444 | Use this method to perform work before saving the object with |
| 445 | a different identity into the database. |
| 446 | Return False to prevent the object from being saved into the |
| 447 | database. |
| 448 | """ |
| 449 | return True |
| 450 | |
| 451 | def post_save_as(self, old_key, new_key, db): |
| 452 | """ |
| 453 | Use this method to perform further work after your object |
| 454 | has been saved into the database. |
| 455 | """ |
| 456 | pass |
| 457 | |
| 458 | def pre_list_matching_objects(self, db): |
| 459 | """ |
| 460 | Use this method to perform work before finding matches in the |
| 461 | database. |
| 462 | Return False to prevent the search. |
| 463 | """ |
| 464 | return True |
| 465 | }}} |
| 466 | |
| 467 | [[BR]] |