This assignment is to build a fully working CRUD (Create, Read, Update, and Delete) application to manage automobiles and their makes (i.e. Ford, Hyundai, Toyota, Tata, Audi, etc.).
This application will be based on this folder in the samples repo:
Do not clone this repository for this assignment. You will make a new
project and application in your
django_projects folder and use this application
as sample code.
This application will be similar to:
The login information is as follows:
Account: dj4e-crud Password: dj4e_nn_!
The 'nn' is a 2-digit number that by now, you should be able to easily guess.
Activate any virtual environment you need (if any) and go into your
and start a new application in your
dj4e project (this project already should have the 'hello'
application from a
workon django3 # as needed cd ~/django_projects/dj4e python3 manage.py startapp autos
autos project is the first of several applications we will add to the
Since we will build a number of applications in this project, we will use the
application to provide convienent urls to switch between applications.
And you should have a file
dj4e/home/templates/home/hello.html that has the text for the top-level page.
You can keep the "Hello World" text in the page somewhere.
Add a link to the "/autos" url in
dj4e/home/templates/home/hello.html and anything else the autograder needs:
<ul> <li><a href="/autos">Autos CRUD</a> <ul>
It is a list because we will be adding more applications in future assignments. :)
The essense of this task is to adapt the code from:
and make it work in your
Here are some tasks:
Go into your
dj4e-samples folder and do a
git pull to get the latest version of the samples code.
Create a template in
home/templates/registration to support the login view.
Copy the file from
dj4e/home/templates - this will be used in your autos templates and make our HTML look
better by applying the Bootstrap
and other styling libraries.
dj4e/settings.py add the autos application to the list of
You can follow the pattern of the
HomeConfig line in that file.
accounts/ so you can use the Django built in login features.
dj4e/urls.py to route
autos/ urls to
from django.contrib import admin from django.urls import path, include from django.contrib.auth import views as auth_views urlpatterns = [ path('', include('home.urls')), path('admin/', admin.site.urls), path('accounts/', include('django.contrib.auth.urls')), # Keep path('autos/', include('autos.urls')), # Add ]
autos/urls.py file to add routes for the list, edit, and delete pages for both autos and makes
autos/views.py file to add views for the list, edit, and delete pages for both autos and makes.
It will make things a lot simpler in the long run if you convert the Make views to
the shorter form like the Auto views.
views.py file, you should not simply use the code for the
Make views. You
should rewrite the
Make views using the same patterns as the
Auto views. If you
don't use the generic edit views on your
Make views you will need to define the
MakeForm in your
forms.py just like in the sample code. The
best approach is to build your
views.py without using
a `forms.py - but you can do it either way.
autos/models.pyfile to add Auto and Makes models with a foreign key from Autos to Makes.
Run the commands to perform the migrations.
autos/admin.py to add the Auto and Make models to the django administration interface.
Create a superuser so you can test the admin interface and log in to the application.
Create the necessary views in
autos/templates/autos to support your views.
Note that the sample code uses a sub folder under
make sure that templates are not inadvertently shared across multiple applications within a Django project.
Find the line in your
base_bootstrap.html that looks like this:
<meta name="dj4e-code" content="99999999">
and change the
9999999 to be "missing"
Make sure to check the autograder for additional markup requirements.
If you ever get a 405 error on a Django page it probably means that you
have defined a view class that does not have a
For example if you meant to say this:
class AutoUpdate(LoginRequiredMixin, UpdateView): model = Auto fields = '__all__' success_url = reverse_lazy('autos:all')
But instead you did:
class AutoUpdate(LoginRequiredMixin, View): model = Auto fields = '__all__' success_url = reverse_lazy('autos:all')
(i.e. you extended
View instead of
UpdateView) - the result is that there
def get(self, request): in your view.
So you get the
405 HTTP status code (invalid method)
when you navigate to the URL that forwards to the view.