Django migrations make your life easy by automatically defining SQL tables for your models. Django comes with ORM (Object-Relational-Mapper) for this and Fields defined in model are mapped to Columns in SQL table.
So whenever you create a new model or change an existing model, you should do migration. Django will create python scripts for migrations which you can store in your source repo for tracking DB changes over time and it’s helpful for your code update in production.
(venv) $ pwd <your_path>/backend/restapi
(venv) $ python manage.py makemigrations quotes Migrations for 'quotes': quotes/migrations/0001_initial.py - Create model Quote
(venv) $ ls quotes/migrations/ 0001_initial.py __init__.py __pycache__
Django created 0001_initial.py file for migrations. Now, let’s run this migration.
(venv) $ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, quotes, sessions Running migrations: Applying quotes.0001_initial... OK
Django has now created the DB table for us in SQLite. Let’s check the same using dbshell.
(venv) $ python manage.py dbshell SQLite version 3.24.0 2018-06-04 14:10:15 Enter ".help" for usage hints. sqlite> .tables auth_group django_admin_log auth_group_permissions django_content_type auth_permission django_migrations auth_user django_session auth_user_groups quotes_quote auth_user_user_permissions sqlite> .schema --indent quotes_quote CREATE TABLE IF NOT EXISTS "quotes_quote"( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "text" varchar(200) NOT NULL, "author" varchar(100) NULL, "image_url" varchar(200) NULL ); sqlite>
Now, let’s check out our serializer class :
(venv) $ python manage.py shell Python 3.7.4 (default, Oct 12 2019, 18:55:28) [Clang 11.0.0 (clang-1100.0.33.8)] on darwin Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from quotes.serializers import QuoteSerializer >>> serializer = QuoteSerializer() >>> print(serializer) QuoteSerializer(): id = IntegerField(label='ID', read_only=True) text = CharField(max_length=200) author = CharField(allow_blank=True, allow_null=True, max_length=100, required=False) image_url = CharField(allow_blank=True, allow_null=True, max_length=200, required=False) >>>
We can see that our serializer class is automatically created from our Model.
You can get all the files related to the examples here : https://github.com/hpin2019/coding-sessions/tree/master/drf-tutorial-1
Next we will create Views for our REST API example.
Be First to Comment