Learn Django by Building an Online Marketplace – Python Tutorial for Beginners
Video Title: Learn Django by Building an Online Marketplace – Python Tutorial for Beginners
learn Django by building a simple Online
Marketplace Django is a python framework
that makes it easier to build websites
with python Stein with code from Stein
teaches this course Stein is a very
experienced course creator the project
you develop in this course features
authentication communication between
users a dashboard for items form
handling and more in this tutorial I’m
going to show you how to build an online
marketplace where people can sell and
buy new and used items first I just want
to show you a little demo of the project
so you know what we are going to build
okay so here we can see the front page
of the project we are building you have
a simple menu with a few items you can
go to the inbox dashboard you can browse
items and you can create a new one on
the front page the six newest items will
be showing and at the bottom you can see
the categories you’ll also see how many
items that belongs to each of the
categories
and if you go to for example new item
you should be able to select the
category for item fill out information
at the name description price and add
image
the browse page you should search in
title and the description of the product
and you can go to categories if you just
want to see toys for examples and you
can clear the filters
in the inbox you should see
conversations that you have with other
users and you can go into here and you
can talk directly to the owner of an
item you can also go into an item here
and click contact seller if you want to
do that on the dashboard you have your
items here you can edit them and delete
them so if you go into one of these then
you have two buttons here edit and
delete and on edit page you can just
fill out information just like you did
when you created it and you can set here
if it was sold or not
I’m going to begin by installing and
setting up everything we need and then
build the project piece by piece I would
recommend that you know the basics of
HTML before you start this course
because I’m going to focus mainly on
Django and a little bit of Tailwind
okay let’s get started building the
project
so first I go to a command line and the
first thing I want to do here is to set
up an environment that Django can work
in Python comes with a built-in virtual
environment called then which I’m going
to use
right now I’m inside a folder called
puddle which is the name of our project
then to create the environment I just
run the command Python 3
Dash M then and then the name which is
just EnV what this command does is that
it creates a virtual environment called
EnV a virtual environment is an isolated
little environment on your computer
where you can install pattern packages
like Django just for this project
this makes it really easy to maintain
deploy and similar
in order to have the environment created
we can activate it by running stores EnV
bin activate
and then you can see here that the name
of the environment is prepended before
the project name
and when it’s activated we can install
Django busing pip install Django
this will now install the newest
unstable version of Django and if you
dependencies that Django has
great
so the last step of this setup now is to
create Django project and we can do that
by running Django Dash admin start
project and then the name which is
puddle
great so let’s go into this CD puddle
just to see what files we have there
so we have a managed.pi and a puddle
folder let me just go to visual studio
code which I’d like to use where I have
open up this folder with environment and
the Django project
so this manage.pi file is sort of a
script for running administrative tasks
like updating the database structure
adding super users running the
development server and similar
plus you have another folder here with
the same name of the project
asgi.pi and wsgi Pi are entry points for
the web server and you don’t have to
think about these files at this moment
these are only going to deploy a project
to a live server
and then you have settings.pi which is
kind of like a global configuration for
the whole project
here we have secret Keys installed apps
and where templates are located
information about the database how we
want the password to be structured and
similar
and the last file is the urls.pi this is
a file that can be thought of of like a
table of contents for the whole project
so this area will link the URL to a
specific View
so I’m not going to explain these files
more right now it’s easier to do that
when we start using mm so you have some
context
okay let’s go back to the command line
and then we’re going to run the Django
development server and just to see that
everything is okay
and to run this with just a python
Dimension by run server
then you can see here that you get the
warning I will come back to this later
right now we can just copy this address
and go to browser I like to use Google
Chrome
and then just paste it here
then you can see here the install worked
successfully congratulations nice
so now that we have everything up and
running we can create our first Django
app
a Django app is a folder with some files
it’s used to separate the views
templates database models and similar
for a specific part of a project
for example the pages like the home page
contact about and similar will each be
stored in one Django app but we will
also have one app for conversations and
one app for items and so on but we’ll
come back to this later
right now I just want to focus on the
front page so I want to begin by
creating a new Django app called core
and to do that I need to go back to the
command line stop the web server and
then say python managed by see here that
we use this file now
start app and then core
and this will now create a new folder
with a few files so we can see that we
have it here
we have the migrations which is
information about the database this is
generated by Django so you don’t have to
think about it right now
admendous pie is where we register the
database models to be used inside the
Django admin interface
dot Pi is like a configuration file but
just for this specific app
models.pi is where we Define database
models like information about what we
want to store for an item for example
the title description price and similar
test.pi is where we can run automated
tests and similar for this app
and views does Pi is where we Define
views for the app
so it can be a bit hard to understand
what all these files do but I promise
you that you will get a better
understanding of them when we start
using them
and now that we have created this app
it’s almost ready to be used we just
need to tell Django that app exists and
they’re going to use it
so if we go back to settings.coin you
can see here that we have a little
segment called installed apps we have a
few of these built-in apps here already
and then at the bottom you can add core
and the functionality that comes from
these built-in apps is something that
most djangos that’s used at some point
for example you have the admin interface
where we log in and can add the data to
the project we have one for handling
sessions a one for handling
authentication and similar
I will come back to a few of these later
in this video so since you know I added
core hair Django knows that this exists
and is going to be used
so then we can begin setting up the
front page
so if I just close this and find
views.pi we can create our first View
So Def index
then we pass in a parameter called
request this is information about the
browser your IP address if it’s a get or
post request and similar
so this has to be put in on all views
that we use
and then we just want to render a
template very quickly by saying return
render and we Post in the request
parameter so this will now be available
inside the template
and then the template we’re going to use
which is core slash index.html
and save so this is how simple a view
can be
and now that we have the view we can
create the template so inside the core
folder create a new folder called
templates
Django will automatically look for a
folder called templates inside all of
the register apps in the installed apps
section
and then inside the templates folder I
want to create one more folder called
core
this refers to the core from The View we
just created so this folder so Django
automatically find this folder and then
it will find the core index file in here
and then in here we can just create a
new file called
index.html and this will do something
like this so we add the doctype HTML
the HTML tag head
and then here we can set up the meta
chart set
charge it utf-8
and then we can set up the viewport meta
name view Port content this is so that
page can be a mobile friendly
width equals device Dash width and
initial Dash scale s1.0
and then I want to include Tailwind as a
CSS or as a CDN so script SRC HTTP test
colon slash
cdn.tailwind css.com
and then we can just close this tag
right like that now we can add a title
to the page title puddle close this one
title close the head
create an important tag and then in here
you can say div class p x 6 py6 space in
here and H1 the front page then we can
oops sorry closed H1 close the div close
the border and close HTML and Save
so the last step now is to add this to
the urls.pi file
so if I just open up the folder here
again and find puddle URL step by
then we can import The View we just
created so from
core.views import index
and we can add it to the top of the URL
patterns path set the path to be empty
since this is the front page
and then we want to use the view called
index now we can set the name for this
to be index
and Save
so if I now go back to
here again that we can run the server
go back to Chrome and refresh and now
I’m at the front page and we can see
here that I have space above and on the
side and this is now H1 from Tailwind
nice
okay so now that we have all of this we
can create a new page a page for the
contact information
but let’s begin by fixing up the front
page a little bit first
because right now all of this code is
inside index.html file I want to move
most of the code into a new file called
base.html which the index.html file
should extend this way we can reuse the
code for more templates throughout this
project
so inside the same folder as index.html
we can create a new file called
base.html great so here I can actually
just copy all of the code from the
index.html copy this and paste it here
and then save this
actually I can take this cut it out save
and then in index.html file to now
extend the base file we can say extends
core slash base dot HTML
then below here and just paste this
title
so now this will make sure that we
extend the best.html file but the
content is missing so if I go to the
browser and refresh the title is gone
so we need to introduce something called
a code block
so let’s go back to paste.html and add
that inside this div here so block
content
and close it and block
this will not help yet but if I copy
this go back to HTML index.html
wrap it around the content here
then we make sure that everything we put
in here will be rendered automatically
in here by Django 7 now refresh you did
that the title is gone but the content
from here
uh sorry this doesn’t have to be inside
all of the templates nice
so let’s add one more code block to the
base.html file for the browsers tab
title so in here
you can say block title
and then and block
space and then we pipe it like that
so then on the index.html file create
the same code block block title
and now we can say welcome here
and block and then welcome will
automatically be put here in front of
the pipe pedal
see if I now refresh it will say welcome
pedal nice
great so now we can continue to the
contact page let’s begin with the view
so in views.pi we create a new view
depth contact passing the request
parameter return render request course
Dash contact dot HTML and Save
then we can create a template so let’s
just copy everything from index.html
create a new file we’ll paste this and
save it as contact.html in the same
folder
then we can rename the title of the of
the page to contact and then the contact
page
then we need to add this to the URLs
also so let’s begin by importing it
contact
and import contact and remember to end
this with the Slash let me pause in
contact here that the name to be contact
and the name we put in here would make
it easier to reference this URL later in
the project
so if I now go to the browser and just
manually go to contact
then you will see that we are on the
contact page perfect before we dive
deeper into Django I just don’t add a
menu and a footer so let’s go back again
to base with HTML and edit there
so base.html
and then above here add a new no close
py6 PX
6 Flex because we want items to be next
to each other
justify Dash between so that all space
is put between the logo and the links if
you remember from the demo
and then items Center so that the links
is on the same height as the logo
and then we want the border on the
bottom one pixel so border Dash B for
Border bottom and the color for the
Border can be border Dash gray 200
and then close the navigation bar like
that
and then on the left side we want a logo
so a hrf
slash I’ll add a close to this text Dash
XL
and we want the form to be summable so
font oops font semi bold
purple
so let me save now go to the browser see
if this is correct yes so I don’t have a
navigation bar here which is white with
the border on the bottom and then the
logo to the left here nice
and then I want some items on the right
side here
so then I need to create a new div oops
div close
space Dash X6 and this will
automatically now add a space between
each of the items I put in here
so first can you begin with the new item
link a hrf it’s going to just be empty
for now close text XL
oh sorry text LG
front semi bold
and when we hover this I want it to be
gray so hover colon text Dash gray 500
new item
so let me see if this looks good
yes so now it’s put here on the right
side and when I hover it it becomes gray
nice
so let me copy this to make a browse
link
browse
and then I want to sign up a button and
a login button so this looks a little
bit different so I just want to create a
new element H or if can just be empty
for now
close
and this I want to have some padding so
px-6 and py3 text can also be LG and the
font can be semi bold just like a pair
but I wanted to have a background so PG
teal 500 this is a dark green color then
I want to set text to be white
I want the corners for the button to be
around that so I can either rounded Dash
XL
and when we hover this I want the
background to be a little bit dark or
green so hover PG teal 700
and then we add the title sign up
even I’ll make a copy of this we can do
the same thing for the login a sec I
want this to be gray 500 and gray 700
when we hover this
then just replace the title with log in
and Save
so if I go back now refresh we have the
new item browse and then these two with
the hover functionality
great
then I wanted a very simple footer here
as well
so the nice thing is now that for
but before I go there I just want to
show that this comes from the base.html
file so if I go to front page the menu
is there as well that’s what’s so nice
about extensions so let’s go back to
base.html and create the footer So Below
this div you can add footer
oops footer close
py-6px-6
Flex justify between just like up in the
menu and we got the b g the background
to be BG gray 800 so it’s a dark gray
color
I can close this
I’m done in here on the left side I want
information about the project div clause
W 2 3 so this will take up to a third of
the footer
padding rate can be set to 10.
close this one
and then in here I want the title so H3
class
mb-5
front semi bold
and this can be text Gray 400
about
so we can save this now see what this
looks like
refresh so here I have the dark footer
and then the title and down below here I
want just a little bit of random text
some lorem ipsum so P close
text LG text Gray 500 or if blah blah
blah
so just copy paste and close the
paragraph
so then we have a little bit information
about the project here
then on the right side I want one more
menu where we can link to about page to
contact privacy terms of use and similar
so here with a div close
W1 slash three
this doesn’t need any padding
and then here we had just make a copy of
this title
same menu instead
and then I want to use a UL for the menu
so you are close space Dash Y dash 2 so
each of the elements in here have some
space between them close the URL and
then Li a hrf can just be empty for now
close text
LG
textile 500 so it’s a green color
and when we hover this I want this to be
a little bit darker green color so text
teal 700
but
closed link and close the Li
so let’s see what this looks like now
don’t have the menu here
nice
so let’s add a few more elements here
I mean that is the contact
oops
privacy
and then we have the terms as well as
terms of use
privacy policy to be correct
nice so if I refresh now we have the
menu and everything we need
so now I just want to activate this link
here
and let me go back here and then I want
to use a code called URL let me just
pass in contact and then Django will
automatically use this URL function to
find contact
hair and give us this URL so if I
refresh now click this one and I’m sent
to the contact page nice
by the way if you want to learn even
more Django from me then check out my
channel code with Stein you can find a
link in the description below great now
that we have the core app with a few
pages it’s time to start working on the
categories and the items and for this we
need one more Django app
so go to the command line stop the web
server then say python manager by start
app
item
I want both of the categories and the
item to be located in this app
so that we need to register this with
the Django so let’s go back to
settings.pi and add it in the list here
save and we can close this
so I want to begin with the categories
since this is the simplest database
model
so if I just open up the browser here
again find the item models.pi
then we can create a new database model
but then close
category pausing models.model just so
Django knows what we are using
and the categories should only have one
field which is the name so name equals
models.char field
and we need to set the max length there
we can set this to 255 so don’t have any
limitations
so then when we are created a database
model we need to update the database by
going to the command line and set python
manage by make migrations
so now you can see here that migration
is for item we want to create a new
model called category and if I open up
the migrations folder and we have a new
file here
then you can see here what this is going
to do so it’s going to create a new
table called category with the ID field
and the name field
so now that we have done this we just
need to tell Django to actually execute
this script and that’s very easy we just
python managed by migrate
so now you can see here that it created
it down here the item.001 and also a few
other database tables this is from the
authentication and similar that Django
comes with
now this warning should also be removed
so to make it possible to add data or
categories to your project we need to
log into the admin interface and to do
this we need a user so let’s create one
python managed by create super user
admin
admin at turtle.com and then a password
then the super user created successfully
then we can run the web server again try
to log in
so if I just copy this go to new tab
slash admin
then I need to log in with the user I
just created
okay so now you can see here that we
have the authentication authorization we
have users where is the admin user I
just created but category model isn’t
there even though the database should
have it already
but you need to just tell Django that we
want the database table to show in the
admin interface so if you go to item and
add the main.pi then we can first begin
by importing the category model here so
from dot models import category and I
can say dot models because this admin.i
file is in the same folder as models
and then to register it we just say
admin.site to register pass in the
category
so if I now go back and refresh the item
that appeared here and we have the
categories database table here nice
let’s try to add a few if I just click
add let me add the toys I can add the
furnitures
I can add um
clothes
and save so if you see here now I see
two things that I just want to fix first
of all categories is misspelled that’s
because Django just automatically adds
an add an S to the end of the app name
but this should end in IES
and same here category object three
doesn’t tell me anything about what this
actually is so we need to set the string
representation for this clause
so if I just go back to the model Supply
we can begin with the categories name
so Class Matter
and then we say verbose name plural
categories
and Save
a very fresh now you can see here that
this is now spelled correctly
then I want to show the name of the
category here so now we need to override
the string representation so depth Str
self return self.name so I just want to
show the name the value from here
it’s even now refresh is it closed
Furnitures and toys nice
thing I just want to do now is to order
this by name and this is also done in
the meta which is kind of options for or
configurations for the model so ordering
name
and since this is a typical we need to
add a comma here since this is a
iterable
so refresh then everything looks great
there nice
and then I want to go to the next
database model which is the item model
so below here because I close item
because in models.model
I want this to have a name as well so I
can just copy this paste it
and I want the description so
description equals models dot text field
so this is now expected to be much
longer than 255 characters that’s why I
want to use a text field and not a chart
field
I guess the blank equals true and null
equals true in case the user doesn’t
want to provide a description for the
project
and then I want the price for the price
field so price equals models.float field
and I want a Boolean field to Mark if
it’s sold or not so is sold equals
models.bully in field default should be
just a defaults
and I want to know when this was created
so created at equals model dot date time
field and I just want to add this
automatically so then I can just add
here Auto now add equals true then
Django will handle this for us
but I also want to know who created this
so create that at night created by
equals model dot foreign key now this is
a index in the database between this
item and the user for example adding a
new user
so here I can pass in the user which I
will import very soon
and then I need to set something about
the related name to items so it’s very
easy to get all of the items belonging
to a specific user
and then the last parameter that we need
here is the on delete models dot Cascade
so if a user is deleted all of the items
will also be deleted
so now we can see here that I get an
error because user is not defined so I
need to imported a pair from
django.comtrib dot auth dot models
import user
then the warning is now gone
also I want one more foreign key after
the category so category equals models
Dot foreign key for send category
and then we can set the related name
here also to items and on delete models
dot Cascade so if you delete the
category all of the items belonging so
let’s category will also be deleted
so the last field I want to add now is
the image
so for example below the price we can
use the image equals model dot image
field
then I want to specify where on the
server I want this to be uploaded so
upload to
item images and then Django we create
this folder for us if it doesn’t exist
blank equals true and no equals true in
case the user doesn’t want to provide an
image so if I now save we can go and
update the database again so just go
back to the terminal stop the web server
then you can see here that I can’t use
the image view because pillow is not
installed I’ll just sort this I just
need to run this command so clip install
pillow a pillow is a python library for
handling images like resizing saving
them and similar
so now that this is gone add-on I can
run the make migration script again
and you can see here that I changed the
meta option for the category and I want
to create a new model called item
and then just pattern matched by migrate
so the last step 10 or the next step is
to register this in the atom interface
again so import item and admin.site
register item and Save
so if I now go here refresh okay sorry I
need to run the server again of course
refresh and then I have the items here
but before I can create any one I just
need to do some configuration for the
images
so if I go to the settings.pi
scroll down we find something called
Static files this is formable CSS files
and similar as you can see here but I
need to do the same thing for the media
files so media URL should be media slash
and then where the root folder for the
media file should be so media root
equals base there
slash media
so now this will create a media folder
inside the root folder of the project
this variable is defined at the top pair
unless just the root folder for the
project
so now we can try to add a few of these
so if I click add item and I select the
categories toys
uh
um for example Teddy Bear this is the
description
and then the price for example 100 and
then an image
then I can select the teddy bear
and this is created by admin
so then I can click save and add another
one to create one more in the clothes
and then check it blah blah blah just
add some random information
and then select an image
okay it’s shoes that I have here so shoe
one
and this is also created by admin
so now you can see here that I have the
same string representation problem here
you just want to fix that before I do
anything more just copy this paste and
save refresh and I will see the name of
the item so if I now go back to visual
studio code you can see here that we got
the new folder called media and then
Django created a new folder called item
images and in there the images is
uploaded nice
so now I want to show the newest
products from the database on the front
page
so let’s find core use.pi then we need
to import the database models here
so from item dot models import
category because I want to show this as
well and item
and then I can get the six newest
project products here the same items
equals
item.objects dot filter is soul equals
false because I don’t want products that
is sold
and to get six I can just say six like
this 0 to 6.
and then to get all of the categories he
has a categories equals category Dot
objects.old
and then to post them in and to be able
to use them in the template we need to
add a context here so comma
categories past n categories and items
items now this here two points up to
this
nice okay so then we can begin by
showing that
items so in the index.html you can just
remove this one and create a new div
class
margin top six so we have some space up
to the menu
px-6 py12
PG gray 100 rounded Dash XL
close that div and then in here I want
to add a title so H2 close
mb12
text 2 times XL text Center and then the
title newest items
and save so let’s go to front page just
to see that it looks okay
yes newest items and then I have a box
here to show the items and so here I
want to have a grid virtual three and
three items
So Below the title I can create a new
div close
grid grid calls three because I want to
add three columns and then get three
oops cap three which is the space
between each of the items
and then in here I want to Loop through
the items that we provided in The View
that is these ones which is a list of
items and we can just F4 item and items
close this one and four
and then we create an element here div
close it and a hrf
just close that one as well it can just
be empty for now
and then we can show the image on the
top so it did
and then ink SRC
item dot image
dot URL now this will give us the full
absolute URL to the image Clause rounded
top
XL so at the top of the image you’ll
have rounded corners
and then below here I want to show the
name and the price so div Clause P6 so I
have padding on the side and on the top
and bottom
what the background to be white and
rounded B Excel so the bottom of this
div will be around that corners
and then here we have a H2 for the title
text to XL
item.title
I can close that one and below here I
want to show the price P plus
text Gray 500
price
item dot price
and close
so even now save this we should see a
loop of the project the products we have
added
okay the name is there because it’s name
and not the title sorry
so I had a teddy bear press 100 shoe
price 50. nice but the image is missing
and this is because that Django really
doesn’t handle media image for us but
since we are just in development now we
can do a little hack or use Django for
this but in production you should never
do this
so inside the urls.pi we can import two
new things
from
chango.conf import settings
and from django.conf.urls
static import
static
and then at the bottom here you can add
this plus static
settings Dot
oops
media
URL
so now this points to the URL that we
set in the settings Supply and the
document root to find its files
is settings dot media
root
and Save
so even now go back and refresh the
images is loaded nice
and then below the newest images I want
to show the categories just like in the
demo
so let’s go back to the template
and make a copy
of this
and just paste it below here
and instead of saying newest item to say
categories
close this there and I can close that
div and then in here I would Loop
through the categories
so for category in categories
and four
and then I can show
you can actually copy most of this
and just paste it in here
but the categories doesn’t have image so
let’s remove that and the categories
doesn’t have
uh price but we can show how many
products or items is in here
so to do that we can create a function
or we can just say category dot items
dot count
and items so I think this should be
correct
one items zero items one items
but this should of course be category
dot name
so now we uploads on items Furniture
items toys phone items nice
so now we have a working front page for
this project
next step now is to make it possible to
go into the detail page of an item so
let’s begin with the view for this this
view should be in the item views.pi
so here we can set def detail crossing
the request parameter but since we want
to find the detail of an item we need an
ID or a primary key for this so let’s
add one more parameter here PK for
primary key
and then to get this from the database
with the item equals get object or 404
right angle will give us a 404 error if
this object doesn’t exist in the
database
and we want to get this item from the
item model where the primary key is
primary key
so this is now the primary key on the
model itself and this is the one we get
from the URL
so you can see here that I get two
warnings because I haven’t imported this
shortcut this can be together with
render
and I need to import this model
so from dot models import item
so now the warning is gone now we can
return and render template so return
render
Quest
in item slash detail.html
and then the context which is item item
and Save
so the next step then is to create the
folders and this template so here create
a new folder templates
and item
and detail so detail.html
and this should also extend the
base.html so extends
core slash paste.html
I won’t have the title here so block
title
and then in here we can show the name of
the the items item.name
and then just close this block and block
then the block for the content block
content
and block
so then in here I would have a grid for
I want to show and then in here I want
to have a grid because I want to have
the image on the left and then
information about the item on the right
side so div class
grid
grid calls five
and get can be set to six
and then on the left side we have the
image so div close
call
oops called spam
call sorry call Dash span three because
I want to take up three of the available
filed columns
msrc
item dot image dot URL
close rounded Excel because I want image
to have rounded corners
so before addending more hair I just
want to see what this looks like
so the next of them is to import this
into the URLs file
I want to have a separate URLs file for
the items because this is a much cleaner
way to do this
so here I want to create new file
urls.play
and then we first need to import pod so
from
django.urls import path
and we can import all of the views for
the items from
dot import oops views
and URL patterns oops URL patterns
path
and when this has an integer
primary key we want to use the views dot
detail View
the name can be detailed
so this now expects an integer called
primary key or PK and this PK has to be
the same as we’ve set there
and detail might be a little bit
confusing now so I want to import or
Implement something called at the name
here
name item I will show you very soon how
this works this will now be a namespace
for this app
then I just need to import this URLs
file to the main URLs file so in puddle
urls
at the topic part items
include
item.urls and this points to the URL
file we just created
and I get the warning here because you
need import this together with pot
and then all URS that begins with item
will automatically take Lego into this
and check if there is a pod with the
primary key there
nice
so the last thing we can do now before
we test this
is to go into index.html and activate
the link here
so URL then we provide item which is the
namespace or the app name detailed then
we provide the primary key by saying
item.id
save so now Django will fix this URL for
us so if I click this now teddy bear you
can see that I’m sent into the detail
page for the teddy bear and you can see
the teddy bear name up there great so
now I want to show some information on
the right side here select the name the
price who is selling this the
description and similar
so let’s go back to the detail.html
create a new div class
call span
span whoops
Dash 2
close that div
actually I want some more classes here
like p-6
and BG gray 100 and rounded
XL
and then the first element in here I
want to add is an H1 H1 Plus
mb-6 text 3 XL and then item dot name
close to H1 let’s see what this looks
like
yes we have the gray box here with the
title nice so now let’s add the price
and who’s selling this so P close
text Gray 500
trunk price
item dot price
and close the paragraph
if I just make a cooked this I can
rename the tight layered cellular
and then item dot created
by dot username so basically give us the
username for the person who added this
so 100 and seller is admin
below here I want to show the
description for the product item
so P plus
text Gray 700 is a little bit darker
strong
and then close you can have a text Gray
500 and this
description
[Music]
closed string at the BR for line break
and then item dot description
close that one
and Save
so I only want to show this description
or this title if there is an actual
description so we can test that up here
if item.description
so now this will only be rendered if the
user filled in and description for the
item
so let’s close this and if like that and
then below here I can have a button
which we will activate later a hrf
class
inline block
margin top six we’re gonna space on this
padding X6 and py3
text can be large and the font can be
semi-bold
and the background can be bjtl-500
text can be set to White and if we hover
this we want the background to be darker
so hover PG TLD 700 and we can also have
rounded Corners it’s all rounded Dash XL
and then the title contact seller
so we’ll come back to this and activate
it later but let’s make sure it’s
looking good and it does
nice then below here I just want to show
the related products or items so if
there are more products in the same
category
so let’s add one toy car
blah blah
and toy car
is it by admin and then I want this to
be showing at the bottom here
so let’s first make some changes in the
view because here is where we get the
related items related items equals
item.objects
filter
and then I want to get all of them
items in the same category as this one
so category equals I10 dot category
and I want to filter out the ones which
set to sold so sold is still false
and I want to exclude this item from the
list so dot
exclude
PK equals PK
and I only want to have three so zero
colon 3 to split it
and then
we just need to append this related
items list like this and Save
and then to show this I just want to
Loop through and show them just like we
do on the front page so just copy this
entire div here
and paste it below this grid the bottom
but instead of saying item in items you
can say related items and
place the title with the related items
and Save
so let’s see what this looks like
related items and I have the toy car
here if I go into this the teddy bear
will be a related product nice great so
now that they have the basic browsing
for this project I want to make it
possible to sign up
so I Can Begin by creating it
new file in the core app
so in the core app
is where I want all of these views to be
located let me just close a little bit
of this and then in the core app I want
to create a new URLs file file to clean
up a little bit
now you can import path again from
django.urls import port
and from Dot
import views so import all of the views
belonging to this app also one is that
app name to be core now we set up the
URL patterns can begin with empty one
pot
something
views.index and the name is also index
and we can also add above there so or
contact or whatever we created if I just
go to puddle URLs now we have this
contact
so let me move this in here and say
views.contact and Save
so now I can remove this from there and
when the URL here is empty I want to use
the include statement here as well so
include
core.urls so now it it will Loop through
all of the paths here before it continue
and tests with the items
so then I don’t need to import this here
anymore but if I now save and go here
and refresh I will get an error on this
one in the footer because now this
doesn’t exist anymore
so let me open up base.html and rename
this to core colon contact
since I added app name here
it’s a very fresh note everything is
back as it was
okay so let’s continue with signing up a
user
so inside the core app I want to create
one more file called forms.pi so Django
helps us with creating users validation
and similar let’s first import forms
from Django from Django import forms
and we can import a user creation form
from django.com trip
oauth.forms import user creation form
and I need to import the database model
for the user so from django.com
oauth models import user and then we can
create it here so close sign up form now
we pass in the user creation form which
we imported a pair
and then we need to do some
configurations plus meta do we need to
set the model we are going to use which
is user that comes from Django
and then I want to specify which Fields
I want the user to fill out Fields
equals username authentic fill out email
password one
one and password 2 which is the repeat
password
so let’s save this for now
and then we can create the view where we
are going to show this form
so inside you’ve used Pi we can import
the form we just created from dot forms
import
sign up form
and then we create the view so at the
bottom here we can say def synapse in
the request parameter
and then we can create an instant deform
form equals sign up form
whoops
and then we say return render request
then the template which is course
signup.html now you just need to post
the form into the front end form like
this
and save then we need to create the
template before we can test this so sign
app.html I want this to extend the base
as well
oops
extends core slash space dot HTML not
add a block
title
sign up and oops and block
okay have a double there
block content
and close this one and block
and then in here we can begin with the
Box around the form div clause
W1 slash two which just filled out the
half of the screen
my6 to have space above and below this
button my box and mx-auto so it’s
centered on the screen
on the background to be PG gray 100 and
have rounded corners
close that one
then we can have it title H1 close
and b-6
text 3XL sign up
so before I add anything more here we
can test that this is working
so let’s go to URL point in show where
to add it there but sign up
slash views DOT sign up and the name s
sign up
now we can update the menu so this link
to the correct page
so that is the first link here
URL core colon sign up
and Save
so if I go back now refresh click sign
up now we have this box that fills out
off of the screen and is centered
um looks like I forgot to add some
padding to this box so let’s go here and
say p-6 save
refresh and now it looks a little bit
better down below here we can show the
form so let’s go back here
create the form element form method
should be that post action dot which is
the same page we are on
and since we are using a post request we
need to add something called a csrf
token this is security built in with
Django to prevent cross-site reforce
requests for jury I think it’s good
I can render the form by saying form.s
p
and then we have a button so button
class
py4 px8 text can be large the background
can be teal 500 and only over this can
be darker so BG teal
700 and I want the corners to be a
rounded X L and the text to be white and
we can just set the title to be submit
and close the button
save go back and refresh and we have the
form here which doesn’t look very good
but we can try to customize this so it
looks a little bit better
so if I then go back here
just remove this this is the easiest way
to show the form
and we can first make sure that if there
are errors that are not connected to the
fields we showed them here by saying
form dot non field errors
then we can add a div close mb-3
and in here we have a label for the
username label
close
inline block
margin button to username
close the label
and then
form dot user name
close that Dev press save it now refresh
we just have the username and it looks a
little bit better but I will make it
even better
let’s add a br here
and we can copy this paste it for the
email
and form. email
and the same with the password password
one
the repeat password repeat password
repeat the password to
and Save
refresh so now the Forum looks a little
bit better we will fix more styling I
just want to make sure that we print out
more errors down here if there are any
so if form dot errors or
form dot non field errors
then we can close this pressing and if
and if there are any we create a new div
class and B three
padding six in all Direction background
can be PG red 100
rounded XL
there
and then we just Loop through the images
here and the errors
form Dot sorry we need to Loop through
rambasing for field in form
field dot errors
close this and four
and I just want to move this down there
sorry it shouldn’t be up there
paste and Save
so if I now refresh it looks a little
doesn’t look any different and I can
submit it yet but let’s fix the rest of
the styling here which is done inside
the user creation or the sign up form
so let’s go back to forms.play and we
need to do some
changes here
so the username let’s begin with that
username equals form dot Char field
then we set something called widget
equals form dot forms dot text input
typeset attributes adders equals create
the dictionary
placeholder
your username
save this see if it works yes now we
have a placeholder there now we can add
some Clause let’s do it as well so close
W Dash full
py4
px6 and rounded XL
nice so now this looks much better let’s
do this for the other three Fields as
well
email and this should be an email input
so Django will validate it for us your
email address
and then password 1.
this should be a password input
or password
I can just copy this
password to
and then
repeat password and save so if I now go
back and refresh the form looks much
better
still nothing happens if I try to submit
this so I need to do some more changes
in the views.pi
here I need to check if the user has
submitted and to do that like that if
request dot method is post then I know
that the form has been submitted so then
you can create a new instance of the
form I think form equals sign up form
and passing request dot post which is
all of the information from the form
then I can check if it’s valid so if 400
is valid then I can say form dot save
and then the user will be created in the
database and when that is done we can
redirect the user to the login page that
doesn’t exist yet we can just say return
redirect
login now we will get the 404 error but
we’ll fix it later
and if it’s not the post request
then we just use the amped form like
that
now we get the new warning here because
we haven’t imported this so let’s import
it up here together with render
so if I now refresh try to submit
assign a pair
so then I was redirected to the login
there nice but it means that it was
working so when I go to users I will
have a code with Stein
the email and the password you can see
here that user is active but it’s not
status staff and it’s not a super user
that means that I cannot log in into the
admin interface with its user only super
users can do that so now we have the
possibility to sign up a user
then we can make a possible to log in a
user
so I Can Begin by creating the form so
if I just go to forms.pi we want to
still be using an authentication form
from Django so where we import this we
can also import Authentication
[Music]
form
and then we create it at the top here
doesn’t really matter
Clause login form
or authentication form
I’m done here I want to override the
fields for the username and the password
so I can copy this
paste it and the password
here it’s just called password and not
password one but besides this it’s
completely same
so I don’t need a view for this because
I’m just going to be used a login view
that Django comes with so if I now just
go to uart Pi I Can Begin by importing
this from Django so from jango.com trip
dot oath import views now this will
crash with this one so we need to rename
this by saying s auth views
then I can append it here port
login
slash
and then the view we’re going to use
which is now auth views Dot Login view
dot S View
like that and now set the name to be
login
but now I need to specify that we are
going to use the form we created here so
we need to import it here
from dot forms import login form
so I can just say authentication oops
Authentication
[Music]
form equals login form
so if a note just go to
base.html I can import this sorry fix
this here URL core login
save
I can try to use it
okay so now I get the template does not
exist error because this doesn’t exist
but this isn’t really not the file we
are going to use
so I need to update here to tell Django
which files to use template name is core
slash login.html
and this will look very similar to the
sign up for the file so just copy
everything
create a new file and save it as
login.html
here I don’t need a repeat password this
should be called formed password
and I only need the username and the
password
so then I can just fix the title log in
and Save
Django automatically calls a form for
form that’s why I don’t need to rename
this and everything should now be
working
so let’s go back refresh and now we see
the login form so now I can try to log
in with the user I created
call it Stone and then my password
so now I was automatically redirected to
something about accounts slash profile
this doesn’t exist and we are not going
to use it either it’s just the default
URL that Django tries to redirect you to
so you can override this
by going to settings time settings of
Google login redirect
URL so you can be sent to the front page
when you are logged in
login URL
so again so if you try to visit the page
you don’t have access to you you will be
redirected to this URL
and you can also that log out redirect
URL Wireless here
to the front page or when you logout you
will be sent to the front page
so if I just remove this
now it doesn’t look like we are
authenticated I want to hide these two
buttons when we are authenticated and
show an inbox button and a dashboard
button instead
so let me go to base.html
and then above here you can say if
request.user dot is authenticated
then I want to show two buttons else
then we can show these two
so let me close this and if and save so
I’ll go back and refresh those two
buttons are now gone that’s because
their Quest user is authenticated
there is always a user and if it’s not
authenticated it’s an anonymous user so
then I can make a copy of these two
buttons
just paste it in there and the first one
can be in box and the other one can be
dashboard
then they can just be empty for now
say go back and refresh now we have
inbox and the dashboard button instead
nice
okay so now I want to make it possible
to add items for the users
so we can begin by creating a new form
for this
so if I just go back to editor and find
the app for this the item and then
create a new file here for forms.pi
then I Can Begin by importing forms from
Django from Django import forms and I
want to import the database model item
so from dot models import item
then I can create the form class new
item form and pass in forms dot model
form
mm-hmm like is that the class matter so
we can do some configurations we want to
add the model to be item and the fields
we want here is category and we want the
name the description
oops the price and the image
great so now we can save this for now we
will come back to The Styling in a
little while
but now we can go to reviews.pi to
create the view for this
So Def new request
and I want this to be I want Django to
require that you are logged in to access
this error so to do that you can add
something called a decorator so let’s
begin by importing this
from django.com trip.org dot decorators
import login required
and under apply that to this view we
just add login required so if you want
to try to visit this without being
authenticated you will be redirected to
the front page now sorry to the login
page and then here I can say form equals
new
item form we just need to import lists
from dot forms import new item form
and then we can say return render
request
Post in the template name which here
should be item slash form dot HTML
because I want to reuse this for the
edit as well
then we can pause in the form here form
and form and Save
and when that is done we can create the
template
so just open up here again and then
inside the item folder create an equal
form dot HTML so here we can begin by
extending the template extends
core slash base.html
now we set up the title block title
new item no sorry actually here I want
to post in a variable called title
you might wonder where this is coming
from and I will show you under block
in views here you can append it there
title
new item but then we can do the same
with the edit view we just say edit edit
item
so when that is done you can go down
here create a block content
close it
and then in here we can begin with the
title H1 close
mb-6 text 3XL
and then the value here should also be
title which will be new item
and then we can set up the form form
method should be post the action can be
the page we are on and here we also need
to set something called Inc type to
multi port
form data and this is needed to be able
to upload images
and then here we add the csrf token
close
space dashy 4 to have space between all
of the fields
and then just form dot s
p
so we can close this one and then I want
to show the errors there you just want
to copy that from the
from the sign up form because this is
identical
or the login form that doesn’t matter
let me just copy this go back and paste
it here
and then below here we can have the
button which is also the same as in the
sign up or login
so just copy this
go back and paste it and then you just
want to close the form element
okay
um you should be there
like that I think everything is okay
here now
last step done is to import this to the
URLs page
so here you can add this above here but
new
views Dot
a new item
isn’t that what I called it
not just new okay
and then we set the name to be new
like that
great so if I now save
then I can go to the menu in base.html
to add the button here so we can have
this together with these two the Inbox
and the dashboard
can I have it first there
URL should go to item colon
new
like that
and then we can rename the title the
link to new item and Save
so even now go back and refresh
should have a new okay I will already
have this of course so I don’t need the
button there
sorry but okay sorry let me just
copy this and paste it there because it
should be on that link it doesn’t need a
separate button
so save again refresh and if I click
this now I will be redirected to the
login page because I wasn’t logged in
so let me log in with code with Stein
and then my password
let me try to click it again new item
and then I have the form here nice
so then I just want to fix the style
length for this
so if I go back to forms.pi
I can add it there I can do it a little
bit differently here than the other
places just to see another way we can do
this so the Jets oops digits equals
and I create the dictionary
category
colon forms dot select
and then I want to set the attribute so
Etters create a new dictionary close
W full
py4
px6 rounded XL and border and Save
so we can see if this is working
that did not work
okay so I need to have this inside the
meta class of course
so save this now
refresh and then I have the styling
there nice
then I can do the same thing for the
other just that I want to have this as a
variable so up here I can say input
Clauses equals paste it and then I got
the input Clauses like that so I don’t
have to repeat this multiple times
and this is still working nice
so then I can copy this just at the
comma here
replace this for name and then forms dot
text input
like that
and the same with the description
there should be a forms dot text area
and then the price which would be text
input
and the last one image
which is the file input
so then I can save this now go back and
refresh and now the styling here is also
working
perfect
I want some space between these two
by the way so this should have an empty
six
that’s better
great so then the last thing we need to
do now is to add a check if this form is
submitted assimilar just like we did in
the sign up so in the views.pi here we
can see if request dot method
method is post
then form equals
new item form and here we need to pause
in request dot post and also requested
files so we get the files that user
uploads
and then we can say if form dot is valid
but instead of saying just form dot save
here we need to do some changes
here we can say item equals form dot
save and pause and commit equals false
because if we try to save to the
database now the created by field is not
added therefore we will get an error if
we try to do this that’s why we need to
set commit false so this will just
create an object but not save it in the
database and then item dot created by
equals request.user which is always
authenticated since we have this login
decorator
item.save
and that is done we can just redirect
the user back to the detail page of the
item they just created so return
redirect
pause in item colon detail
and we need to set the primary key
equals item.id which is the item we just
created
so I get the warning here now because I
haven’t imported redirect together from
the Django shortcuts
and if it’s not a post request then it’s
a get request and we can do it like this
so that is the whole new view perfect
so we can try it out now if I go here
now select the category furniture
chair test the description blah blah
two hundred dollars then I want to
select an image
so I can take the chair there submit
okay enter a number
okay
let me do that instead 200 maybe I
should use a DOT instead of a comma
submit
the image attribute has no file
associated with it
okay so that didn’t work
requested files that’s correct
then form as the angk type multipart
slash form Terror
this is weird
let me just try to log in here again
with the admin user
oops
admin
like that and I just want to delete this
here
or I can set them
chair one with it just so it’s working
now it’s working here but why didn’t the
image get uploaded
okay let me just try one more time it’s
a new item Furniture chair two
hundred choose file chair two submit I
guess now it was working so I don’t know
what the error was because I haven’t
changed anything
but at least now it was working perfect
so that means that now we have to
possibility to add items
okay so now I want to start building the
dashboard where you can see your items
edit them delete them and similar
so let’s start by creating a new app so
python managed by start app dashboard
now we can add this to the settings file
dashboard
and Save
um here I don’t want any database tables
but I want to view
so if I just open up dashboard views.pi
then I Can Begin by importing the item
model so from item dot models import
oops
import item
and I can import the login decorator so
from
django.comtrib.auth.models import sorry
decorators import login required
then I can create the view just begin
with adding this decorator def index
request
and then I want to get all that items
that you have created so items equals
item.objects.filter created by equals
request.user
and then I want to render the template
render
sorry return of course render passing
the request parameter
then set the template which should be
dashboard
slash index.html
and then here we can pause in the items
and Save
so then I can set up the template for
this
I think it will be similar to top pair
so
no it will not that it will be very
similar to the front page the beginning
of the front page
so down to the box for the categories
let me just copy everything here
and then create a folder templates
and then
dashboard and then the file for that
index.html
paste this and then I can just say and
block
this can just be like it is
and the title here can be dashboard and
instead of the newest items I can say my
items
and then
just save this so now we have the view
and the template then we just want to
create a separate URLs file here
so URL Point begin with importing from
django.urls import path import import
all of the views from dot import views
setup app name to be dashboard
and then the URL patterns
then I just want one haircut empty
because I want to prefix this in the
main URLs file we use that index set the
name to be
index
and save then I just want to import this
to the main URLs so puddle slash urls.pi
I can add it here below the items or
above that doesn’t matter Port dashboard
include
dashboard.urls
and Save
so if I now just open up base.html I can
activate
this button here called dashboard
URL
dashboard
colon index
and Save
so then we can see if this is working
now just refresh sorry I need to run the
server again
refresh again click dashboard
my items and then I can see them here
nice
so now we can continue to make it
possible to delete your items
so I can create a view for this
so inside the dashboard views.play
here
say at login required because you need
to be logged in to delete your item
def delete because in the request
parameter and the PK which is the ID for
the item we want to delete
now we get the item from the database by
saying item equals get object or 404
so it’s importance
we want to use the item model and we
want to get to where the primary key is
primary key from the URL and we are
created by equals request.user so we
can’t get objects that you haven’t
created yourself
and to delete it you just say item dot
delete now we can redirect you back to
the index page of the
of the
of the dashboard
and when I think about it I actually
want to have this in the item I item
views instead so just copy and remove it
from there go to item views.pi
paste it below here
then we can redirect user to the
dashboard so return redirect
dashboard colon index
like that
then we can import it to the URLs and
add it here just copy this
add delete at the end
use dot delete and name is also delete
so if I now go to the detail page
you need to do some changes here
so here where we show the price
I want to have a box telling it that
it’s your
is telling it that it’s your item
and that should go here below the
description
together with this contact seller so
here I can say if
request.user equals item dot created by
then I know that you are the one who
created this
create a new theme here mt6 to some
space above
p-6 to get Space Inside the Box PG white
and rounded XL to get around that
corners
if you are not the one who owns the ad
then and only done will I show the
button for contacting a seller
and if
and then in here we can say p this is
your
item
and then I can have the delete button
here so a hrf
URL
item colon delete pause in the item.id
which is the one you are visiting
then it is at classes on this button in
line block
ing top 6
px-6 py3
text LG
font semi bold
PG red Dash 500 so we know that it’s
dangerous button to click
text white and around the dash XL
let me pause and delete here
so let’s see if this is working now if I
go back here go into one of the items
nice this is your item and delete
because now I’m logged in as the admin
user
okay I just want to add a edit button
here as well so I have it so make a copy
of this one
paste it
replace the title with edit and the
button here can be green instead so teal
500
and the link can just be empty for now
at least now I have these two buttons
great
so let me try to delete this one by
clicking this
delete and now it’s gone from the list
there nice
okay so now I want to make it possible
to edit an item
so if I go to the forums.pi inside the
item folder
then I can make a copy of this
I could reuse this but I want to have an
extra field
and I don’t want the category here so
let me remove the category remove it
from the list here as well
and then rename this to edit item form
plus I want to add one more field here
is sold like the one we have in the
models.pi
this doesn’t need any styling so the
form can just be like it is now
and then if I go to view stockpile I can
make a copy of the new view
paste that I rename it to edit here we
need a primary key so we can get the
correct item from the database
and I want to get that just like we do
down here in the delete View
here I do not want to use the new item
form I want to use the update item form
and the same down here edit item four
as you can see here and it’s import this
so let me scroll to the top where we
import the new item form and also import
the edit item form
so let me scroll down and then error is
now gone we also need to do some other
changes first and it’s important I edit
the title there
and here I do not need to do this here I
can actually just say form dot save
because now the created by is already
set
one more problem now is that if you try
to go to this page the form will be
empty so we need to pause in some data
here and to do that we can say instance
equals item
and the next problem is that this if we
just try to save this the form will get
an error because the instance is not set
on this one so let me set it here as
well instant equals four no sorry item
so now everything here should be okay
so then I just need to update the URL
urls.pi in the item folder
a copy of this edit
a date and add it
the last step done is to find a detailed
page so we can update the URL so URL
item colon edit
and pass in item.id
and Save
so now this should work so if I try to
go to the teddy bear
edit now you can see that I have it here
and it said
and Save
so teddy bear edited that means that it
was working so you can now create edit
and delete items perfect
now I want to work a little bit on the
browse page so we can search filter on
categories and similar
so let’s begin with the view for this
and just close all the files so it’s
easier for you to follow along so if I
open up item views.pi
then you can have it this on the top so
I like to have the list View and then
the detail View and then more specified
view below
So Def items or you can call it browse
if you want to because in the request
parameter
here I want to get all of the items from
the database that is not sold so items
equals
item.objects.filter is sole equals false
now we can render the template return
render
request pass in
item
slash items.html
[Music]
and then we just need to pass in the
items
and Save
so let me import this into the URLs file
in the item folder
this can just be empty since the items
is added in the main URLs file views dot
items
and name items
and Save
so if I now open up a base.html we can
update the URL here
URL
I oops item items
save I can just close that one so now we
can test I will get an error now because
you have not created the template so
that is the next step
so let me go back to visual studio code
create a new file
browse dot h sorry items.html
this should also extend the core slash
paste.html file set the title block
title
and here we can just call this items we
can call it browse or search or whatever
you want actually
and block and then block type now
content content
close it and block
and then here I want this to be split
into just like in the demo
so I need to add a grid here div class
pb-6 so we get some padding on the
bottom of the screen here
enter the grid grid calls for Gap four
close this one
and then I want one to the left which
should be this sidebar where we can
select the filter search similar so div
clause
call span dash one
just close it
and in here should be the Side Bar
and then you have the div clock oops div
clause
call span 3
close and in here I want to list out the
the
items just like on the front page so if
I open up index.html
you can make a copy of this one
and just paste it in here
and Save
so let me try this now so if I refresh
the template is there we have the
sidebar and then the list of items
perfect so then I can begin working with
the sidebar here
should maybe have a background here on
this
hair maybe if I just add it there BJ
gray 100
fresh so then I get the white background
and these and simpler which is a little
bit better
so then the next step is to add the
sidebar
so we can begin with adding a form
method get and not post
action should be URL
item items that is the one we are on
but I like to do it like this now
okay
that one
and since this is a get request we do
not need the csrf token
and then first here we can add the input
field for the query input name query
and close W Dash full
py4
px6 on this to be border and around that
XL
you can set the type the text
and the value to be
query I will get this from the back end
very soon set the placeholder to be find
a bike
chair
or a car
or whatever you want
and then below here I want to have a
search button so button close
empty-2 the lesson space up to input
field
py4 PX
eight
text LG bgt 500
and text white around the Excel
search
the button and the form is closed okay
so if I save now go back and refresh you
should now have the search bar there
nice
so let me just fix the backend for this
as well
so that we get the query and we post it
into the front end when we have it
so at the top here we can say query
equals
request.get.get query default this to be
empty now we can pause it into the front
end as well
like that so if I now try this about
today the search will not work but you
can see up here the third day is a panda
there and we also have it in the form
here nice
so let me try to filter the search as
well if there is any query so below here
we can say if query and we know that the
user has filled it out items equals
items dot filter
and then name I contains
equals query so if the name contains the
query I
insensitive then the query will be
filled out
or processed it’s probably more correct
so if I refresh now you can see that
only this is there if I empty this all
of the items are there but if I want to
search in the description as well I need
to introduce something called Q
so let’s import this
from Django Dot
db.models import Q this makes it easier
to search in multiple fields
and then in here add the queue around
this
so if it’s in the name
or use a pi pair queue the description
I contains
equals query so if the title or the
description contains it it will be
searched perfect
great so now that you have this we can
continue with the categories first we
can get all of the categories from the
database
so categories equals category Dot
objects.org
so let’s import this up here
and we need to append this down here in
the context
so now I can go back here and then below
the form I can Loop through them and
make it possible to click them
so I’ll just separate this a little bit
by adding HR Clause empty to our my six
and then p plus font summative
bold cut the chorus p
then I’ll Loop through them inside an
unordered list
four category and categories
closed and four
and then in here because Ally close
py2 px2 rounded Dash XL
and then in here I want to have a link
so a hrf
URL should be item
item colon items
and
close it like that and now we can append
the query so query equals query from the
form up here but I also need to specify
the category category equals
category dot ID which is the iteration
we are on now
and then here you can say category dot
name
let me close the link and I can close
the Li
and save so if now go back and refresh
you know where the category is showing
here great
um but if I now click this nothing
happens and this is not showing as
active either so it can be again when
making it possible to show as active
so in the close here we can say if
category dot ID equals category ID I
need to provide this from the backend
times at PG
gray 200
and if
so this will not work now because we
don’t have access to this yet so we need
to go back to the Views pi
then I guess category ID equals
request.get.get
pausing category ID there
and then just default this to be zero
and Save
if I refresh now
it’s still not working you just try to
inspect this
okay so that does not work
maybe if I default it to this no sorry I
forgot to provide it down here of course
and Save
so refresh
and it’s still not working
maybe if I take it back to zero
nope
okay
no items if the category.id equals
category ID
okay remove category ID from there so
this will just be category which is the
name we have a pair
so this is still not working
so if I just convert this to integer
down here set this to Zero Save on the
refresh now you can see this has a gray
background color nice so then I need to
just make it possible to filter on the
categories so above here I can say if
category ID then I know that you have
selected a category
items equals items filter
where
category
ID equals category
ID
and save so let me refresh and now it’s
only getting this if I select clothes it
doesn’t get anything twice you get these
two nice so that is now working perfect
so the last thing I want to do here now
is make it possible to clear the filters
so if I just go back to the template
make a copy of these two
and that’s a clear filters and then in
here I just want to add this input
button
so make a copy of the UL
I and then in here we have the button
ahref which can go to URL item colon
items and this will then reset the
filters reset
or
clear
does not add some Clauses so this is
more like a button close
empty two
py-4 px8 inline block
PG yellow 500 text and G
and around that Dash XL and text can be
white
so refresh and then we have the care
filters so if I click this now the
categories are cleared and the search is
cleared perfect so everything here is
now working as it should
so now automobile was about to
communicate with each other I want to
make it possible for users to send
messages to the owner of a product or an
item
so we can begin by so we can begin by
creating a new app so let’s go to the
web server python managed by start app
conversation
hit enter
then we can register this in
settings.play
close these other files
conversation
[Music]
and Save
so when we have this now we can create a
new database model for this
so in models.toy I want to create a new
model for the conversation
close conversation passing model dot
model
and here I want the reference to the
item so we also need to import this from
item dot models import item
and item equals model dot foreign key
pause in the item and then we set a
relate name to
conversations
and if you delete an item also want to
delete all of the conversations so here
we say models dot Cascade
great and then I want to know who is the
members of these conversations so
members
equals models dot many to many field
because the conversation needs a
multiple users the owner and the one who
is contacting you
there on depositing the user because the
user’s object are going to be used
so to relate the name to be
conversations
so now I get the warning here because I
haven’t imported this so I’ll do that
from django.com
Models import user
and then I want to know when this was
created Created at equals small dot date
time field
person Auto now add
is true and I also want to know when it
was modified so we can update an order
by this
modified at all models dot date time
field
and here it is using for Auto Now equals
true so every time we save this object
this will automatically update it
threat magic claws meta here so we can
set ordering by default
percent minus modified at
and Save
um but before we update the database we
can add one more table here close
conversation message pause in
models.model I would love to just use
message but that would crash with some
built-in functionality that Django has
so we can begin by adding a reference
app to the conversation
models.4ind key
conversation related name is messages
and on delete
models dot Cascade
so if you delete an item the
conversation will be deleted and also
the messages that makes it very easy
I need a feel for the content of the
message also text field
and when it was created so let me just
copy this and I want to know who created
it so created by equals models.49k
user related name can be created
messages
and if you delete user also delete all
of the messages so model dot Cascade
great now we need to update the database
from the make migrations and then the
migrate script then I can just run the
server so we have it running
so before I do anything more I want to
add open up the admin okay so we can
register them in the admin interface
from dot models import conversation and
conversation message
admin dot sorry
admin.site.register conversation
[Music]
admin.site.register conversation message
so that’s done nice
so then I want to create a new file here
for the forms so we can have validation
and similar
forms.play Can Begin by importing the
forms
so from Django
import forms and we need to import the
conversation message model from dot
models import conversation message and
then we create the form
conversation message
form
percent forms.model form
and then we can add a class meta
set the model to be conversation message
the fields we want to use is only
content
then we can set up the widgets so we get
some nice styling
only for the content field
forms.txt area
actors
new dictionary close
probably full
py4px6 rounded Excel and we want to have
a border on it
great so if I now save this we can open
up the views.pi in the conversation app
and create the first view here so I’m
going to have a separate view for new
conversation so when you click the
the contact seller you will be sent this
page to Def new conversation
pass in request and the primary key and
the primary key here is for the item
and to make it easier to know this maybe
I should just call it item underscore
primary key just so I know that it’s not
for a conversation
and then I can get item from the
database
get object or
404 item where the primary key is item
primary key
then I need to import these two here so
we can begin with the get object or 404
I’m from item that models import item
and then I want to check here if you are
the owner then you should not be able to
visit this page so if item dot created
by equals request user
sorry to equal sign here
then just return read erect
to dashboard colon index
or you can redirect user wherever you
want but I think this is a good place
and import this shortcut as well
and then I want to get all of the
conversations connected to this item
where you are a member so conversations
equals conversation
dot objects
filter item
equals item
and then filter where members
in remember to double underscore
equals request.user.id
so this is checking now is that if this
ID is one of the members then we can
proceed
so now I get a new error here because I
haven’t imported this
so from dot models import conversation
and I can also import the form which is
create this from dot forms import
conversation message form
and the reason why I want to do this
here is I want to check if there already
is a conversation with you and the owner
and in that case I want to redirect you
to that conversation so if conversations
then there is an actual conversation so
you can just pause it there for now
redirect
to
conversation because we don’t have that
page yet
and then down here we can check if the
form has been submitted if requested
method is post
then we can check the form using form
equals conversation form conversation
message form passing request.post data
not put post
and then if form dot is valid and the
contact field is filled out correctly
and we can create a new conversation so
conversation
equals conversation.objects
dot create item equals item so to do
this before I create the message
and then we need to add U to the members
list and the owner of the item to the
members list
so conversation.members.ed
request dot user
and conversation dot members dot add
item dot created by and I will save it
conversation
dot save
then we can create the conversation
message conversation message equals form
dot save and posting the commit equals
false so we don’t get error from the
database
then we need to set the reference to the
conversation
conversation oops
so let’s just points up to this one and
who created it so created by equals
request
dot user
now we can save this as well and then we
can redirect it back to the item
so return redirect
items item sorry item colon detail where
primary key is item primary key
and if it’s not post request let me just
create an empty form
equals conversation message form
then we can return and render the
template return render request
pause in the template which here should
be conversation Slash new DOT HTML
and we can pause in the form like this
save
so now I want to create a URLs file for
this app as well oops that’s wrong place
in the conversation app
urls.pi
crunch Django import port and then the
views
from dot import views
and app name should be conversation
and it’s the URL patterns pod can be
new
and here we want to pass in the integer
called item primary key
and then we just have used dot new
conversation and the name should be new
so then to link to this we just say
conversation colon new
so let’s import this to the main URLs
file which is in the puddle folder
thought inbox
or you can call it conversation if you
want to do that
include
conversation dot urls
save and close that file
so now I want to create a template for
this
so let’s begin with the folder templates
conversation and then the template
itself new.html
and then again I want to extend the base
template so extend core slash paste.html
set up the title block title
here we can say new conversation and
look
oops
and block
and block content
and we can add the title layer H1 close
oops and b-6
and text
3XL new conversation close this one and
we can close the and block
then I just want to fix the link to this
page so we can test that everything is
working
so let me just open up
detail.html I can activate this button
URL conversation colon new and then the
item ID
so if you now go into one of these
okay you need to run
cannot import from Django
from
django.urls import pod
okay so now that is working refresh and
now I can see this since I’m owning this
if I go into toy car and set the code
with Stein as the owner just save
fresh now I can click contact seller and
then I sent it to the new conversation
page so that is working so now I’m just
going to show the rest of this form
and I can copy this form from the item
form page this will be very similar
so let me just copy this entire form tag
and paste that here
here don’t need the multi Port because
you’re not going to send images but the
rest can be like it is
maybe you can say send instead of submit
so save go back and refresh and then we
have the content which is the message
itself perfect
so that means that now I could try to
send this hello
code with Stein I’m
interested
sound
so now we’re standing back here which
means that it was working and if I
refresh then I should have a
conversation there I have one
conversation between these two users for
the toy car
and then the message which contains the
hello code it’s time I’m interested
message great
so now we just want to set up the inbox
page so we can list out all of the
all of the conversations that we have
so let me go back to views.play
and I think I also want to add the login
required here
before I forget that so let me import
this as well from django.com
decorator Support login required
then we can create the inbox view that
login required inbox
Quest
and then here I want to get all of the
conversations that you are a member of
so I can actually just copy the
statement from up here
this can be a conversation you have
created or
I suggest that I’ve been sent to you
just to remove the filter for the item
then we can return and render the
template return render
Quest
conversation slash inbox.html
forcing the conversations for the
template
and Save
so if I now import this into the URLs I
can just put empty here so the URL will
just be in books
then we use dot inbox name is inbox
you have an open up best.html I think I
have a button for this this one yes
inbox
URL
conversation colon inbox
save
and then go back here refresh click
inbox and then I get the template does
not exist error but that’s great because
it makes sense since I have not created
it yet
so let me find a template I can copy a
little bit
take this one
and then create a new file inbox.html
paste it
say inbox
in books
and block
let’s say refresh and then it’s there
great so I’m just going to Loop through
all of the conversations that we have
here
so below here I said div clause
space Dash y 6 space between the
conversations
for
conversation and conversations
I can close this and four
and then we can have a link a hrf it can
be empty for now since we don’t have a
detailed page close block
don’t think that is correct actually
maybe it’s
I’m just messing up a little bit and
then we have a div for the image of the
item so div clause
p dash six
Flex because I want this to be a flex
container PG gray 100 and rounded XL
close that one then out the image to the
left div Clause padding right can be set
to six
in SRC
conversation Dot item Dot image.url
close
w20 rounded Excel so that the width 20
and we have a rounded corners on the
image as well
save us save now we can try to see if
this is working yes then I have the
image for the toy car there then I want
to show here who the member I’m talking
to is and the item we are talking about
so here we can say div
close it right under there
then I want to Loop through the members
the four member in
conversation.members.old
so this is how you get all of the
members and using many to many field
and four
and if the member is not you then I want
to show it here so if member not equals
request.user
and four
and then create paragraph
Class B Class mb-4
strong
member dot username
first strong and now we can show when it
was sent
so
conversation
dot modified that and we know when the
last message was sent
so close this one and then below here we
can show what the item is so
conversation dot item dot name
and Save
so hopefully now
I’ve done something wrong invalid block
tag so this will be and if
fresh and let me see Hue we are talking
to when the message was last sent and
the name of this item great next step
now is make it possible to click this
conversation so you can see the detail
page and make it possible to talk to
each other
so let me just go to views.pi create a
new view
at login required because you need to be
logged in
def detail request and the primary key
and this primary key is for the
conversation and not the item
so now we can get the conversation by
getting all of the conversations you
have first
so we just set this in not singular not
plural
dot get where primary key is primary key
and then
we can just return this turn render
request
conversation
[Music]
detail.html
and I will pass in the conversation
conversation and Save
great so before we do anything with the
form here I just want to create a
template so that we have it
um I think I can just just copy all of
this create a new file and save it as
detail.html
and then for the title we can say
conversation Capital C same thing with
H1 here
and I want to have this and I want to
have this but here I want to say for
message in conversation dot messages
all so we pause in the conversation here
and we get the messages because they are
linked in this here
so go back to the detailed page
then I can remove the anchor tag because
this is not going to link to anything
and then here I want to show the message
so
here I do not need an image for each of
these so let me just remove everything
in here
so I still want to have the padding the
flexed around it and messages are
similar
and then here I can create a new div
and a paragraph be closed and b-4 so we
have some styling for the name
and then strong
message dot created by
that username
and when it was sent sorry I need to
close the strong
pipe or at if you want that message dot
created at
I can close that paragraph
and I can show the message so message
dot content
close that and Save
so if I now go back sorry before I can
test it I need to update to the URLs
here
pot where int is named primary key I can
use the views dot detail
name detail
so if I now go to the inbox I can update
the URL here
URL conversation column detail pass in
the conversation.id and ID and primary
key is always the same
so let me save that now refresh whenever
I click it I’m sent to the conversation
and here you can see the message
and if I have sent the message I want
this to be blue and if you have sent the
message I want it to be Gray
so let me just close the inbox go back
to detail
and then here before we add the
background I can say if
message dot created by equals
request.user name is BG blue 100
else
then it’s gray
and if and save so notice it would be
blue because I sent this message great
but let me make it so that it was the
code with Stein who sent this
refresh and then it’s gray
okay so now I want to add the form below
here so I can send message back and talk
to the other person
So Below this div I create a new the
form so form method should be post
action dot which is the page we are on
and it’s at the csrf token and we can
generate or show the form here form.sp
then I need a button I can just go to
the sign up page and copy this
like that and we can close the form
and let me just really notice the sun
since we are sending a message
if I save now go back and refresh
nothing happens except the button is
showing because we are not having any
forums there yet
so we need to go back to boost.pi and
fix it here
first we can import okay we have
imported it
but we can see if the form has been
submitted so if
request dot method equals post then form
equals
conversation message form and we need to
pause in the request dot post data
and if form dot is
formed is valid then we can create a new
conversation message so conversation
message equals
form dot save and need to say commit
equals false
and then we need to set a link up to
this conversation
and we need to set to create edit or
created by requested user and I will
save it and to update the modified date
of the conversation you can just add
conversation dot save since we have it
already up here
and when that is done we can redirect
the user back to the conversation page
so return redirect
conversation column detail because
that’s a primary key to be a primary key
and else we just create an empty
instance of this form
and Save
so if I now refresh I can’t see that
because I forgot to add it down here
form form save
refresh and then we have it here hello
back
send and now this is blue because I sent
it nice
it’s just a space between this
close
empty six
better
okay so now we have the conversation
here and everything seems to be in order
just want to fix the redirect that I did
up here
where is it the new conversation yes
here if there are any conversation now
we can now return internet return
redirect
conversation
colon detail
and then we can pause in the primary key
equals
we want to get the first one from this
zero sorry put first Dot
ID I think it’s the correct way to do
this let me try so if I just go back to
browse the toy car contact seller then I
sent directly to the conversation page
perfect
so now we have the possibility to create
items we can edit them delete them you
can set them as sold we can view our
items here in the my items section we
can go into them at the temp delete them
everything is working we have a
conversation between the users and
similar
so that is a wrap for this tutorial I
hope you enjoyed it and that it was able
to follow along
if you want to keep practicing your
Django skills feel free to keep building
on this project you can add things like
email verification image Galleries and
admin dashboard and similar if you have
any questions about the code or anything
feel free to leave a comment below and I
will answer as soon as I can
-
Sale!
Wireless WIFI Repeater Extender Amplifier Booster 300Mbps
$29.99$14.99 Add to cartWireless WIFI Repeater Extender Amplifier Booster 300Mbps
Categories: Electronics, Wi-Fi Router, Wireless Wi-Fi Extender Tags: 300Mbps, 802.11N, Amplifier, Booster, Extender, mobile wi-fi booster, Remote, WIFI, Wireless, Wireless WIFI, Wireless WIFI Repeater, Wireless WIFI Repeater Extender, Wireless WIFI Repeater Extender Amplifier, Wireless WIFI Repeater Extender Amplifier Booster, Wireless WIFI Repeater Extender Amplifier Booster 300Mbps$29.99$14.99 -
Sale!
Full RGB Light Design Gaming Headset Headphones with Mic
$24.99$14.99 Add to cartFull RGB Light Design Gaming Headset Headphones with Mic
Categories: Electronics, Gaming, Gaming Headsets Tags: Design, Full, Full RGB Light Design Gaming Headset, Full RGB Light Design Gaming Headset Headphones, Full RGB Light Design Gaming Headset Headphones with Mic, Gamer, Gaming, Gaming Headset Headphones, gaming headset wireless, Headphone, Headphones, Headset, Light, Mic, Package, RGB$24.99$14.99 -
Sale!
Wireless BlueTooth Multi-Device Keyboard Mouse Combo
$39.99$19.99 Add to cartWireless BlueTooth Multi-Device Keyboard Mouse Combo
Categories: Electronics, Gaming, Gaming Keyboards, Keyboard Mouse Combos Tags: Combo, Keyboard, keyboard mouse combos, Mouse, MultiDevice, Set, WireKeyboard Mouse Combo, Wireless, Wireless BlueTooth Keyboard Mouse Combo, Wireless BlueTooth Keyboard Mouse Combos, Wireless BlueTooth Multi-Device Keyboard Mouse Combo, Wireless BlueTooth Multi-Device Keyboard Mouse Combos$39.99$19.99 -
Sale!
High Back Leather Executive Adjustable Swivel Gaming Chair with Headrest and Lumbar
$199.99$139.99 Add to cartHigh Back Leather Executive Adjustable Swivel Gaming Chair with Headrest and Lumbar
Categories: Gaming, Gaming Chairs Tags: Adjustable, Chair, computer chairs, Desk, Executive, Gaming, Girl, Headrest, High, High Back Leather Executive Adjustable Swivel Gaming Chair, High Back Leather Executive Adjustable Swivel Gaming Chair with Headrest, High Back Leather Executive Adjustable Swivel Gaming Chair with Headrest and Lumbar, High Back Leather Executive Adjustable Swivel Gaming Chairs, Leather, Lumbar, Office, Racing, Swivel$199.99$139.99 -
Sale!
Professional LED Light Wired Gaming Headphones with Noise Cancelling Microphone
$29.99$19.99 Select optionsProfessional LED Light Wired Gaming Headphones with Noise Cancelling Microphone
SKU: N/A Categories: Electronics, Gaming, Gaming Headsets Tags: Cancelling, Gaming, Gaming Headphones with Noise Cancelling Microphone, gaming headset, Headphones, Headset, LED, Light, Mic, Microphone, Noise, Professional, Professional LED Light Wired Gaming Headphones, Professional LED Light Wired Gaming Headphones with Noise Cancelling Microphone, Wired, Wired Gaming Headphones, Wired Gaming Headphones with Noise Cancelling Microphone$29.99$19.99 -
Sale!
Gaming Desk with LED Lights USB Power Outlets and Charging Ports
$349.99$249.99 Select optionsGaming Desk with LED Lights USB Power Outlets and Charging Ports
SKU: N/A Categories: Computer Desk, Gaming, Gaming Desk Tags: and Charging Ports, Charging, Desk, Desks, Gaming, gaming desk with led lights, Gaming Desks with LED Lights, Home, LED, Lights, Monitor, Office, Outlets, Port, Power, Room, Stand, USB, USB Power Outlets, White, Workstation$349.99$249.99 -
Sale!
Wired Mixed Backlit Anti-Ghosting Gaming Keyboard
$99.99$79.99 Add to cartWired Mixed Backlit Anti-Ghosting Gaming Keyboard
Categories: Electronics, Gaming, Gaming Keyboards Tags: Antighosting, Backlit, Blue, brown, Gaming, Gaming Keyboard, gaming keyboards, gaming keyboards and mouse, Keyboard, Laptop, Switch, Wired, Wired Mixed Backlit Anti-Ghosting Gaming Keyboard, Wired Mixed Backlit Anti-Ghosting Gaming Keyboards, Wired Mixed Backlit Gaming Keyboard$99.99$79.99 -
Sale!
Wireless Bluetooth 5.3 ANC Noise Cancellation Hi-Res Over the Ear Headphones Headset
$119.99$59.99 Add to cartWireless Bluetooth 5.3 ANC Noise Cancellation Hi-Res Over the Ear Headphones Headset
Categories: Electronics, Gaming, Gaming Headsets Tags: 5.3 ANC Noise Cancellation Hi-Res Over the Ear Headphones Headset, ANC, Audio, Bluetooth, Cancellation, Ear, Earphone, gaming headset, Headphones, Headset, Hi-Res Over the Ear Headphones Headset, HiRes, Noise, Wireless, Wireless Bluetooth 5.3 ANC Noise Cancellation Hi-Res Headphones, Wireless Bluetooth 5.3 ANC Noise Cancellation Hi-Res Over the Ear Headphones Headset, Wireless Bluetooth 5.3 ANC Noise Cancellation Hi-Res Over the Ear Headphones Headsets$119.99$59.99 -
Sale!
Wired Sports Gaming Headset Earbuds with Microphone
$19.99$9.99 Select optionsWired Sports Gaming Headset Earbuds with Microphone
SKU: N/A Categories: Gaming, Gaming Headsets Tags: Accessories, Earbud, Earphone, Earphones, Gaming, gaming headset with microphone, Headphones, Headset, IOS, Microphone, Sports, Wired, Wired Sports Gaming Headset Earbuds, Wired Sports Gaming Headset Earbuds with Microphone, Wired Sports Headset Earbuds$19.99$9.99 -
Sale!
150W Universal Multi USB Fast Charger 16 Port MAX Charging Station
$49.99$29.99 Add to cart150W Universal Multi USB Fast Charger 16 Port MAX Charging Station
Categories: Charging Stations, Electronics Tags: 150W, 150W Charging Station, 150W Universal Multi USB Charging Station, 150W Universal Multi USB Fast Charger 16 Port MAX Charging Station, 150W Universal Multi USB Fast Charger 16 Port MAX Charging Stations, 150W Universal Multi USB MAX Charging Station, 16 Port MAX Charging Station, 3.5A, Charger, Charging, Fast, laptop charging stations, Max, Multi, Port, Stand, Station, Universal, USB$49.99$29.99
Thanks for publishing my course 😁 I hope it can be helpful for a lot of freecodecamps viewers 😁
goated tutorial
Isnt there a vscode extension that autocompletes, closes html and class tags and also suggests more html tags??? tapping all tags like this when you come from a react nextjs habits seems so cringe. You lost tons of time tapping basic html.
Its incredible how much i hate the voice of this guy
One of perfect courses ❤❤❤❤❤
I'm getting errors under detail saying tuple object has no attribute get. Still debugging but did anyone else run into this problem?
First and foremost a HUGE THANKS for sharing your skills and imparting your expertise. You can truly see and feel your passion and being a novice (first intro to Django) the 2.5 hours of video literally took me a good 30 hours or so over the course of 3 days to complete. You can clearly see how much of an expert you are just by the speed of your approach and presentation but which caused me pain in trying to "pause the video" at the right moment to catch up and before you supersonic clicking away from the code and not revisiting. Frequently I was not able to keep up and I had to go through quite a bit of research elsewhere to find out what the remaining code or why my scrips weren't working LOL
All in all it was BRILLIANT! My project works as presented and I now understand the Django structure and methodology and I think you've definitely set the platform for further practice and advancement for me. I will follow your other related work for sure!
Thanks a lot, but the search and filter buttons are not working well .
Thanks so much
Thank you Stein you have the best django tutorials on youtube
this will be very challenging for a complete beginner the instructor shows how it is done but does not explain many of the things he's doing. I wouldn't recommend this for a complete beginner
1:37:08 Bookmark
99.99% quality, just forgot how to logout
hi im a new learner and thus have a very dumb question, my os is windows and thus im asking if the following window has linux or macos commands or not as some one the commands like source wont work for me
this guy didnt explain anything, he mostly just built and expects you to copy the code without explaining what does what
مرسی واحد هامو همه رو با ویدیوهای تو پاس میکنم❤❤❤❤❤❤
The project goes in depth and there's a lot of valuable content. My biggest caveat with this tutorial is that it covers a lot of the "hows" but none of the "whys". The instructor did not explain a lot of the concepts but rather just walked through the process of building the project. This is useful for someone already comfortable with Django who is looking to understand how to build an online marketplace, but is very unhelpful for beginner Django developers.
Thanks for this. It has helped me a lot with my project.
I'm not getting to add anything to Category. When I enter toys, I get an error page saying
table item_category has no column named name
Good tutorial, Thanks bro
Amazing thank you very useful ❤
This is really amazing course, thank you @freecodecamp and @CodeWithStein. So many things to learn in practical way, but it requires previous knowledge in Django.
1:02:58 What is {{ form.as_p }}?
51:44 What is the difference between {{ item.created_by.username }} and {{ item.created_by }} ?
I tried both, but output was exactly the same (Seller: admin)
26:06 What would happen if one runs 'python3 manage.py migrate' without executing 'python3 manage.py makemigrations' in prior?
If you see my comment Please any one of the teamor Mr Stein can you help me to understand how to logout beceause i spent almost 3 days but i didn't get it , thanks
Having issues at 51:12. When I click on the image it's not allowing me to see the image bigger, nor is it giving me the price seller, or description info. What could I be doing wrong?
hello sir, i got error ModuleNotFoundError: No module named 'item'
1:27:01
I fix the problem adding a '/' in item/urls.py
Like this:
path('new/', views.new, name='new')
Thank you so much mann !! I followed alonged and completed this . now i will be adding some things also like deleting the conversation option etc . thanks ❤
Reverse for 'details' with arguments '('',)' not found. 1 pattern(s) tried: ['item/(?P<pk>[^/]+)/\Z'] how can i solve this problem
Thank you sir , very helpful course!
Wonderful tutorial!
When I submit the form it doesn't save the user and shows (This field is required). Whould anyone mind telling me what should I do? it's my first try with django
you are good programer, but as you did not explain, you cant be teacher.
ERROR: Failed building wheel for Pillow
help¡¡¡¡¡¡ i try everything help¡¡¡
I can't see how you can call this a tutorial when you don't stop to actually explain anything. Maybe walkthrough or code-along might be more fitting.
great work!
With the signup form, I was getting an "Unbound" error because the "form = SignupForm()" was unreachable inside the scope of the if statement. But once I moved it to the top of the function it all worked fine.
def signup(request):
form = SignupForm()
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
form.save()
return redirect('/login/')
return render(request, 'core/signup.html', {
'form': form
})
Thank you for the tutorial, it was just what I searched for.
Great video. 👍
This is an extremely complete project. Highly recommend it to anyone with basic django experience, it covers a variety of common and useful topics.
1:20:07
how is he looping through title when there is no title in the model?
It looked very nice, complete, helfull tutorial. Thank you.