The Django admin is great and will probably provide an 80/20 solution if you have a purely internal app, used by people who understand data management. For an externally facing app, used by non-technical people, I would recommend a custom design.
The Django admin is not hard to customise quite extensively and it has many "hooks" to allow you to do so. (Many blog posts on this topic.)
I don't think there is one preferred way, but typically you would write your own views & forms and then have the results displayed in templates, which in turn inherit from the Django admin to keep the look-and-feel consistent. You can then hook these into the main menu system. This is my approach for creating a set of custom reports for a Django app. For more granular level changes, you can add in custom actions to deal with some of the business operations. As always, try and keep your business logic associated with your models.
HTH