This is part of the series Django For Beginners we are going to see about apps in app and we will see about models in django in this part.
In this post we are going to learn about the basics of queries in django. When we use django we do not need to write SQL Queries it is done by django itself, we write super user friendly syntax for the queries ,
Let’s see we want to get all the objects in a model ( note each model is a table, it may be more depending on the type of relation used while creating it ), let the schema of this model be simple it will be as follows,
from django.db import models class Book(models.Model): title = models.CharField(max_length=250) createdAt = models.DateTimeField(default=timezone.now) description = models.TextField() orders = models.PositiveItegerField(default=0)
Now to get it all we use the following syntax,
allBooks = Book.objects.all()
and that’s it will return all the books of QueryList form.
How to run Queries in Django ?
I should have told it first I know but I told it now because you should understand how easy it is to write queries in django. Now let’s see how to run them,
There are two ways,
- Interactive Way ( in command line ).
- In any python file.
To use it interactively just go to your root directory of your django project and type the following command to start the interactive console,
python manage.py shell
It will start the interactive console from which you can import any model in the project, you can access all of the project files. Also you can also import normal python libraries.
You can import models to any file in the project and can use it as per your will and in later part of this series we are going to use in this way in
views.py to write
views for our website.
Now let’s see the basic operations on models,,
To Create New Model Object
To create new model object we first import it and then we use create method which is build in model on it and create it. Let me show a example to you,
from myapp.models import Book newBook = Book.objects.create(title="Harry Potter - Some Part", description="Don't you know it ?") newBook.save()
As you may have seen that creating models is simple damn simple. We just need to pass values in
objects.create method of that model and store it in variable and than use save method on it. It is as simple as it could get.
You may have seen that I have not passed certain parameters, such as
orders, because we have provided
default values to it. But we can also pass it. Let me show you how,
from myapp.models import Book from datetime import datetime from random import randint currentDateTime = datetime.now() orders = randint(0,10) newBook = Book.objects.create(title="Harry Potter - Some Part", description="Don't you know it ?", createdOn=currentDateTime, orders=orders) newBook.save()
This is how it is done. You may have seen that I have passed
createdOn in third place but while creating model it was in 2^nd^ place I did it to show that order in which you pass these keyword arguments doesn’t matter.
This is a awesome book written by Willam S. Vincent and this book is completely updated to the latest Django 3.1 if you prefer it. It is a good choice and it is my personal reccomendation for you. Just check it once it has few pages avilable to read for free online. 😊
Query The Object
Now comes the part of querying the model, here I will cover basics as querying is a very big topic, with the part I cover here would e more than enough for many project , at least in the beginning. Now let’s start,
For each time I will not write import statement for the model, you can copy it from here if you would like to do it,
from myapp.models import Book
Getting All Objects
allBooks = Book.objects.all()
We can use
objects.all() method on a model to get all of the objects in the model.
⚠️ Warning : Shameless plug ahead.
Getting Objects By The Values of their Fields
allBooks = Book.objects.filter(title="Harry Potter - Some Part")
We can use
objects.fiter() method on a model to filter objects in the model. We can pass keyword argument like as I have done above to filter it according to your needs.
Now what I have done above is that I have filtered objects which have
Harry Potter - Some Part in their
title no other objects will be available in the results even if it differs be a space ( ).
Using Like Queries On Objects
allBooks = Book.objects.filter(title__contains="Harry Potter - Some Part")
__contanins to the end of the name of the filed we want it to run like query on. l
__contanins is case-sensitive, which means case of query matters. To use non-case-sensitive queries use
__icontains note it has
i in the beginning.
For those of you who don’t what like query is it is just that it will search for the records in the database which contains
title similar to our given
Queries in Django is a big topic and deserves a blog post or two of its own,but if you want to learn more about queries in django I would highly suggest you to checkout Django’s documentation on queries.
Editing models is as simple as creating it, let’s see this in an example,
from myapp.models import Book book = Book.objects.get(id=1) book.title # Response -> Some Cool Title book.title = "Some Cool Title - Imporoved" book.save()
Here we get object by running
get query . And Now to edit model we edit it like a object ( sort of ) by storing the get query in a variable and then to access the property of the model we use the following syntax
modelvar.field_name , and as you can see above we put a
= sign and assign it the value we want to assign, and then use
save() method on this variable .
Deleting models is simplest by far, what we do is that we just get the model and use
delete() method on it. Let’s see an example,
from myapp.models import Book book = Book.objects.get(id=1) book.delete()
That’s it nothing else.
And guys as you have reached so far I want to ask you for a favor, that can you please share this post as this is small new blog it will help a ton to me. Also and more importantly thanks for reading till here.
Hope you like it. In upcoming blog probably in a week I am going to cover about queries in django, so if your are interested you can book mark my site.