Django - Models

A model is the single, definitive source of information about your data. It contains the essential fields and behaviors of the data you’re storing. Generally, each model maps to a single database table.
The basics:
Each model is a Python class that subclasses django.db.models.Model.
Each attribute of the model represents a database field.
With all of this, Django gives you an automatically-generated database-access API

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

first_name and last_name are fields of the model. Each field is specified as a class attribute, and each attribute maps to a database column.

The above Person model would create a database table like this:

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

Using models

Once you have defined your models, you need to tell Django you’re going to use those models. Do this by editing your settings file and changing the INSTALLED_APPS setting to add the name of the module that contains your models.py.

For example, if the models for your application live in the module myapp.models, INSTALLED_APPS should read, in part:

INSTALLED_APPS = [
    #...
    'myapp',
    #...
]

When you add new apps to INSTALLED_APPS, be sure to run manage.py migrate, optionally making migrations for them first with manage.py makemigrations.

first_name = models.CharField(max_length=30, primary_key=True)
id = models.BigAutoField(primary_key=True)
phone =models.CharField(max_length=30, unique=True)
address =models.CharField(max_length=30, NULL=True) default is false
first_name = models.CharField(blank=True, max_length=30)

Django - Create models

Step 1: create app - python manage.py startapp mymodel
Step 2: register your app in installed_apps
Step 3: python manage.py makemigrations
Step 4: python manage.py migrate

models.py

from django.db import models

class MyModel(models.Model):
    title=models.CharField(max_length=30)
    description=models.TextField()

To register in admin:

admin.py
from django.contrib import admin
from mymodelapp.models import MyModel

admin.site.register(MyModel)
or
class MyModelAdmin(admin.ModelAdmin):
    fields = ['title', 'description']
admin.site.register(MyModel,MyModelAdmin)

Django - View model

views.py

from mymodelapp.models import MyModel

def home(request):
    modelData=MyModel.objects.all()
    
	data={
		'modelData':modelData
	}
    return render(request,'home.html',data)
home.html
{% for n in modelData%}
   <div>
       {{n.title}}
       {{n.description}}
   </div>
{% endfor %}

Arrange data in ascending or descending order

views.py
    modelData=MyModel.objects.all().order_by('title')
    modelData=MyModel.objects.all().order_by('-title')

Limit query result

views.py
    modelData=MyModel.objects.all()[:3]
    modelData=MyModel.objects.all().order_by('title')[:3]
    modelData=MyModel.objects.all().order_by('title')[2:5]

Django Template filter: safe - Marks a string as not requiring further HTML escaping prior to output.

home.html
{{n.description | safe}}

Django Template filter: lower - Converts a string into all lowercase.

home.html
{{n.description | lower}}

Django Template filter: upper - Converts a string into all uppercase.

home.html
{{n.description | upper}}
{{n.description | upper | safe}}

Django Template filter: capfirst - Capitalizes the first character of the value. If the first character is not a letter, this filter has no effect.

home.html
{{n.description | capfirst}}

Django Template filter: first - Returns the first item in a list.

home.html
{{n.description | first}}

Django Template filter: length - Returns the length of the value. This works for both strings and lists.

home.html
{{n.description | length}}

Django Template filter: wordcount - Returns the number of words.

home.html
{{n.description | wordcount}}

Django Template filter: slice - Returns a slice of the list.

home.html
{{n.description | slice:"0:3"}}

Django - Filters

views.py
def home(request):
    modelData=MyModel.objects.all()
	if request.method=="GET":
	    filterData = request.GET.get('inputboxname');
		if filterData!=None:
		    modelData=MyModel.objects.filter(title=filterData)
			
	data={
		'modelData':modelData
	}
    return render(request,'home.html',modelData)
    modelData=MyModel.objects.filter(title__icontains=filterData)
    {% empty %}
    No Data Found