Django Validation in Admin A major error has been discovered, as Processing has become a folder for files

A major error has been discovered, as Processing has become a folder for files instead of folders, which should not be the case. We should only have folders labeled Bank, Sales, Expenses, and Internal. Files should not be stored in Processing. How can I fix this automatically?


I need to write a script that will select all documents saved in the Processing folder, check their current status, and move them to the appropriate folder based on their status.





Then you just have to define a clean() method on the model itself.

The `clean()` method on a model is automatically called by Django's validation process whenever you save an object. This means that the `clean()` method will work regardless of whether you save the object from the command line, a form, or the admin.


When you save an object, Django performs several steps before actually committing the object to the database, and one of those steps is validation. During the validation process, Django calls the `clean()` method on the model to check if there are any errors in the data that need to be fixed before saving.


Therefore, whether you save the object from the command line, a form, or the admin, the `clean()` method will be called during validation and will perform its intended functionality. It's worth noting that if the validation fails, Django will raise a `ValidationError` and prevent the object from being saved.




But then how can we save object with auto import via command but throw ValidationError when we try to save it in admin?


To save an object with an auto import via command line but throw a ValidationError when trying to save it in the admin, you can override the clean() method on the model.

In the clean() method, you can add a check to see if the object is being saved via the admin or not. If it is being saved via the admin, you can raise a ValidationError to prevent the save. If it is being saved via the auto import, you can skip the validation check and allow the save to proceed.

Here's an example:

from django.core.exceptions import ValidationError





Test it


>>> from transactions.models import Transaction

>>> transaction = Transaction()

>>> transaction.name = "Test2"

>>> from accountingperiods.models import AccountingPeriod

>>> periode = AccountingPeriod.objects.get(id=1)

>>> transaction.accounting_period = periode

>>> from paymentmethods.models import PaymentMethod

>>> method = PaymentMethod.objects.get(id=1)

>>> transaction.paymentmethod = method

>>> from django.utils import timezone

>>> now = timezone.now()

>>> transaction.transaction_date = now

>>> transaction.settlement_date = now


>>> transaction.settlement_date = now

>>> transaction.save()

>>>

Ok, it working very well.


Object from commandline Shell is created.




In Django, you can check if an object has been saved to the database by checking its primary key (pk) value. If the object has not been saved, its primary key value will be None.

Here's an example:

In the above example, we create a new instance of a model MyModel with the name field set to 'example'. We then check the pk value of the object. Since this object has not been saved yet, its pk value is None, so the output will be 'Object has not been saved to the database yet.'.

If the object has been saved to the database, its pk value will be a non-None value that represents its primary key in the database. You can use this primary key to retrieve the object from the database or perform other operations on it.

It's worth noting that when you save an object, Django automatically updates its pk value to reflect the primary key assigned by the database. So, if you save an object and then check its pk value, you should see a non-None value.




Comments