I’m somewhat new to Python, Django, and I’d like some advice on how to layout the code I’d like to write.
I have the model written that allows a file to be uploaded. In the models save method I’m checking if the file has a specific extension. If it has an XML extension I’m opening the file and grabbing some information from the file to save in the database. I have this model working. I’ve tested it in the built-in administration. It works.
Currently when there’s an error (it’s not an XML file; the file can’t be opened; a specific attribute doesn’t exist) I’m throwing an custom ‘Exception’ error. What I would like to do is some how pass these ‘Exception’ error messages to the view (whether that’s a custom view or the built-in administration view) and have an error message displayed like if the forms library was being used. Is that possible?
I’m starting to think I’m going to have to write the validation checks again using the forms library. If that’s the case, is it possible to still use the built-in administration template, but extend the form it uses to add these custom validations?
Anything to help my confusion would be appreciated.
UPDATE:
Here’s my model so far, for those who are asking, ‘nzb’ is the XML file field.
http://dpaste.com/hold/6101/
The admin interface will use the Form you associate with your model; your own views can also use the form.
This is exactly what I’d like to do. However, I don’t know how to associate my forms with my models. When ever I’ve created forms in the past they’ve always acted as their own entity. I could never get the administration views to use them while using the ModelForm class. Can you shead any light on this?
I’ve read over the link you gave me and it seams to be what I’ve done in the past, with no luck.
Getting attributes from the file, should probably be a method.
Sorry, could you please elaborate on this? A method where?
UPDATE:
It seams I’ve been compleatly missing this step to link a form to the administration view. http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin
This should now allow me to do the validation in a Form. However, I’m still confused about how to actually handle the validation. S.Lott says it should be a method?
The Form errors are automatically part of the administrative view.
See http://docs.djangoproject.com/en/dev/ref/forms/validation/#ref-forms-validation
You’re happiest if you validate in a Form — that’s what Forms are for. The admin interface will use the Form you associate with your model; your own views can also use the form.
Getting attributes from the file, should probably be a separate method of the model class. The separate method of the model class can be used by the
save()method of the model class or invoked at other times by view functions.‘I could never get the administration views to use them while using the ModelForm class.’
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#form
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin
‘I’m still confused about how to actually handle the validation. S.Lott says it should be a method?’
Validation in a form is done with a
clean()method or aclean_somefield()method.The ‘Adding custom validation to the admin’ link (above) shows how to add the
clean_namemethod to the ‘MyArticleAdminForm’ form.If you’re still confused, trying actually typing the code from the Django web page and see what it does.