I have nearly finished another project. This one is a "To Do List" app. Fairly basic in premise, but it allowed me to work on some interesting functions. For example, giving the option to add and remove objects from the database by directly interacting with the site rather than the admin or back-end specifically. This was done by invoking forms, the style of which was fashioned through Bootstrap admittedly, but I've already started my JavaScript journey and look forward to implementing those skills here.
The back-end of the forms was greatly simplified by utilising Django's generic views. In this project I used the Index, Detail, Create and Delete generic views and they certainly allow for clear and concise code. In the views.py just make sure to specify your model with the Detail, Create and Delete views and the other specifics that they require. For example, with the Delete generic view you can use success_url = reverse_lazy(url_name_path) after you specify your model. The reverse_lazy function as I understand it prevents the delete function from being executed as a GET request and only sends you to your specified (url_name_path) once you actually need to go there. It was actually very satisfying finally figuring out how to get the CreateView and create form to work. I found a great resource video by 'thenewboston' at https://www.youtube.com/watch?v=eouZwgKuA5k called Django Tutorial for Beginners - 30 - Model Forms. Video 31 finishes the steps.