{"id":20285439,"url":"https://github.com/mramshaw/writing_django_2","last_synced_at":"2026-05-13T02:12:18.046Z","repository":{"id":92906680,"uuid":"224202192","full_name":"mramshaw/Writing_Django_2","owner":"mramshaw","description":"Django Hello World (Django 2 version)","archived":false,"fork":false,"pushed_at":"2024-09-04T20:57:22.000Z","size":455,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-14T08:12:08.453Z","etag":null,"topics":["django","django2","pip","python","python-3","python3","sqlite3"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mramshaw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-26T13:45:27.000Z","updated_at":"2019-11-26T20:43:13.000Z","dependencies_parsed_at":"2024-09-06T05:36:24.903Z","dependency_job_id":"02d7e9cb-7020-46b0-8e7e-8120f363068e","html_url":"https://github.com/mramshaw/Writing_Django_2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mramshaw%2FWriting_Django_2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mramshaw%2FWriting_Django_2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mramshaw%2FWriting_Django_2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mramshaw%2FWriting_Django_2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mramshaw","download_url":"https://codeload.github.com/mramshaw/Writing_Django_2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241780465,"owners_count":20019058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","django2","pip","python","python-3","python3","sqlite3"],"created_at":"2024-11-14T14:26:42.731Z","updated_at":"2026-05-13T02:12:13.026Z","avatar_url":"https://github.com/mramshaw.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Writing Django 2\n\n[![Known Vulnerabilities](https://snyk.io/test/github/mramshaw/Writing_Django_2/badge.svg?style=plastic\u0026targetFile=requirements.txt)](https://snyk.io/test/github/mramshaw/Writing_Django_2?style=plastic\u0026targetFile=requirements.txt)\n\nHaving investigated [Django 1 with Python 2](http://github.com/mramshaw/Writing_Django) it seemed\ntime to investigate Django __2__ with Python __3__, mainly because Python 2 support ends in 2020.\n\n[As my initial exercise was pretty straightforward, rather than try to update that repo, I will\n simply recreate the whole exercise with Django 2 and Python 3. For more details, please refer to\n the original repo.]\n\n## Django LTS\n\nNote that we will use the __LTS__ version of Django 2, which at the time of writing (November 2019)\nis __2.2.7__.\n\nThis release requires Python [3.5 or more recent](http://docs.djangoproject.com/en/2.2/faq/install/#faq-python-version-support).\n\n## Python 3\n\nVerify the version of Python as follows:\n\n```bash\n$ python3 --version\nPython 3.5.2\n$\n```\n\n[I have both Python 2 and Python 3 installed. On my system, Python 2 is \u003ckbd\u003epython\u003c/kbd\u003e\n while Python 3 is \u003ckbd\u003epython3\u003c/kbd\u003e. Likewise Python 2 uses \u003ckbd\u003epip\u003c/kbd\u003e while Python 3\n uses \u003ckbd\u003epip3\u003c/kbd\u003e. In the instructions that follows I will use \u003ckbd\u003epython3\u003c/kbd\u003e and\n \u003ckbd\u003epip3\u003c/kbd\u003e but these may be replaced with \u003ckbd\u003epython\u003c/kbd\u003e and \u003ckbd\u003epip\u003c/kbd\u003e for\n systems where only Python 3 is installed.]\n\n## Prerequisites\n\nInstall the latest version of Django (plus dependencies) as follows:\n\n    $ pip3 install --user -r requirements.txt\n\nVerify the installed version of Django as follows:\n\n```bash\n$ python3 -m django --version\n2.2.7\n$\n```\n\n## Create a Project\n\nUse the \u003ckbd\u003edjango-admin\u003c/kbd\u003e command to do this:\n\n    $ django-admin startproject polls\n\nAnd time to see if everything works so far:\n\n    $ cd polls\n    $ python3 manage.py runserver\n\nThe results should be something like:\n\n```bash\n$ python3 manage.py runserver\nWatching for file changes with StatReloader\nPerforming system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.\nRun 'python manage.py migrate' to apply them.\n\nNovember 26, 2019 - 16:48:54\nDjango version 2.2.7, using settings 'polls.settings'\nStarting development server at http://127.0.0.1:8000/\nQuit the server with CONTROL-C.\n[26/Nov/2019 16:49:27] \"GET / HTTP/1.1\" 200 16348\n[26/Nov/2019 16:49:28] \"GET /static/admin/css/fonts.css HTTP/1.1\" 200 423\n[26/Nov/2019 16:49:28] \"GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1\" 200 86184\n[26/Nov/2019 16:49:28] \"GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1\" 200 85876\n[26/Nov/2019 16:49:28] \"GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1\" 200 85692\nNot Found: /favicon.ico\n[26/Nov/2019 16:49:28] \"GET /favicon.ico HTTP/1.1\" 404 1971\n^C$\n```\n\nThe development server at http://127.0.0.1:8000/ should look something like:\n\n![Development_Server](images/Development_Server.png)\n\n## Create an App\n\nThis needs to be done in the folder where `manage.py` lives:\n\n    $ python3 manage.py startapp polls_app\n\n## Create a View\n\nOpen `polls_app/views.py` and change it as follows:\n\n```bash\n$ git diff polls_app/views.py\ndiff --git a/polls/polls_app/views.py b/polls/polls_app/views.py\nindex 91ea44a..d2dfb9f 100644\n--- a/polls/polls_app/views.py\n+++ b/polls/polls_app/views.py\n@@ -1,3 +1,7 @@\n from django.shortcuts import render\n \n-# Create your views here.\n+from django.http import HttpResponse\n+\n+\n+def index(request):\n+    return HttpResponse(\"Hello, world. You're at the polls index.\")\n$\n```\n\n[Note that [render](http://docs.djangoproject.com/en/2.2/topics/http/shortcuts/#render) may not be required yet, but we will leave it.]\n\nCreate a `polls_app/urls.py` file as follows:\n\n```python3\nfrom django.urls import path\n\nfrom . import views\n\nurlpatterns = [\n    path('', views.index, name='index'),\n]\n```\n\nNext update the `polls/urls.py` file as follows:\n\n```bash\n$ git diff polls/urls.py\ndiff --git a/polls/polls/urls.py b/polls/polls/urls.py\nindex c8c9627..9be9eec 100644\n--- a/polls/polls/urls.py\n+++ b/polls/polls/urls.py\n@@ -14,8 +14,9 @@ Including another URLconf\n     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))\n \"\"\"\n from django.contrib import admin\n-from django.urls import path\n+from django.urls import include, path\n \n urlpatterns = [\n+    path('polls/', include('polls_app.urls')),\n     path('admin/', admin.site.urls),\n ]\n$\n```\n\nAgain, lets check to see if everything works:\n\n```bash\n$ python3 manage.py runserver\nWatching for file changes with StatReloader\nPerforming system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.\nRun 'python manage.py migrate' to apply them.\n\nNovember 26, 2019 - 18:06:31\nDjango version 2.2.7, using settings 'polls.settings'\nStarting development server at http://127.0.0.1:8000/\nQuit the server with CONTROL-C.\n[26/Nov/2019 18:06:53] \"GET /polls/ HTTP/1.1\" 200 40\n[26/Nov/2019 18:07:03] \"GET /admin/ HTTP/1.1\" 302 0\n[26/Nov/2019 18:07:03] \"GET /admin/login/?next=/admin/ HTTP/1.1\" 200 1819\n[26/Nov/2019 18:07:03] \"GET /static/admin/css/base.css HTTP/1.1\" 200 16378\n[26/Nov/2019 18:07:03] \"GET /static/admin/css/login.css HTTP/1.1\" 200 1233\n[26/Nov/2019 18:07:03] \"GET /static/admin/css/responsive.css HTTP/1.1\" 200 17944\nNot Found: /\n[26/Nov/2019 18:07:16] \"GET / HTTP/1.1\" 404 2026\n^C$\n```\n\nThe polls app at http://127.0.0.1:8000/polls/ should look as follows:\n\n![polls](images/polls.png)\n\nThe admin interface at http://127.0.0.1:8000/admin/ should look as follows:\n\n![admin](images/admin.png)\n\nAnd our development server at http://127.0.0.1:8000/ should now look like:\n\n![404](images/404.png)\n\n[END OF PART 1]\n\n[START OF PART 2]\n\n## Database setup\n\nWe will stick with the default `sqlite3` database. We will also leave our timezone as `UTC`.\n\nSo lets run our [database migrations](http://docs.djangoproject.com/en/2.2/topics/migrations/):\n\n```bash\n$ python3 manage.py migrate\nOperations to perform:\n  Apply all migrations: admin, auth, contenttypes, sessions\nRunning migrations:\n  Applying contenttypes.0001_initial... OK\n  Applying auth.0001_initial... OK\n  Applying admin.0001_initial... OK\n  Applying admin.0002_logentry_remove_auto_add... OK\n  Applying admin.0003_logentry_add_action_flag_choices... OK\n  Applying contenttypes.0002_remove_content_type_name... OK\n  Applying auth.0002_alter_permission_name_max_length... OK\n  Applying auth.0003_alter_user_email_max_length... OK\n  Applying auth.0004_alter_user_username_opts... OK\n  Applying auth.0005_alter_user_last_login_null... OK\n  Applying auth.0006_require_contenttypes_0002... OK\n  Applying auth.0007_alter_validators_add_error_messages... OK\n  Applying auth.0008_alter_user_username_max_length... OK\n  Applying auth.0009_alter_user_last_name_max_length... OK\n  Applying auth.0010_alter_group_name_max_length... OK\n  Applying auth.0011_update_proxy_permissions... OK\n  Applying sessions.0001_initial... OK\n$\n```\n\n## Model Creation\n\nNow lets create our models - update `polls_app/models.py` as follows:\n\n```bash\n$ git diff polls_app/models.py\ndiff --git a/polls/polls_app/models.py b/polls/polls_app/models.py\nindex 71a8362..48780e6 100644\n--- a/polls/polls_app/models.py\n+++ b/polls/polls_app/models.py\n@@ -1,3 +1,12 @@\n from django.db import models\n \n-# Create your models here.\n+\n+class Question(models.Model):\n+    question_text = models.CharField(max_length=200)\n+    pub_date = models.DateTimeField('date published')\n+\n+\n+class Choice(models.Model):\n+    question = models.ForeignKey(Question, on_delete=models.CASCADE)\n+    choice_text = models.CharField(max_length=200)\n+    votes = models.IntegerField(default=0)\n$\n```\n\n## Model Activation\n\nNow lets activate our models - update `polls/settings.py` as follows:\n\n```bash\n$ git diff polls/settings.py\ndiff --git a/polls/polls/settings.py b/polls/polls/settings.py\nindex c2d9e83..f7170c2 100644\n--- a/polls/polls/settings.py\n+++ b/polls/polls/settings.py\n@@ -31,6 +31,7 @@ ALLOWED_HOSTS = []\n # Application definition\n \n INSTALLED_APPS = [\n+    'polls_app.apps.PollsAppConfig',\n     'django.contrib.admin',\n     'django.contrib.auth',\n     'django.contrib.contenttypes',\n$\n```\n\nAnd lets create our migrations:\n\n```bash\n$ python3 manage.py makemigrations polls_app\nMigrations for 'polls_app':\n  polls_app/migrations/0001_initial.py\n    - Create model Question\n    - Create model Choice\n$\n```\n\n[If we wished, we could inspect our [migration](polls/polls_app/migrations/0001_initial.py) at this point.]\n\nCheck for issues:\n\n```bash\n$ python3 manage.py check\nSystem check identified no issues (0 silenced).\n$\n```\n\nApply our migrations:\n\n```bash\n$ python3 manage.py migrate\nOperations to perform:\n  Apply all migrations: admin, auth, contenttypes, polls_app, sessions\nRunning migrations:\n  Applying polls_app.0001_initial... OK\n$\n```\n\nExamine our migrations:\n\n```bash\n$ python3 manage.py showmigrations\nadmin\n [X] 0001_initial\n [X] 0002_logentry_remove_auto_add\n [X] 0003_logentry_add_action_flag_choices\nauth\n [X] 0001_initial\n [X] 0002_alter_permission_name_max_length\n [X] 0003_alter_user_email_max_length\n [X] 0004_alter_user_username_opts\n [X] 0005_alter_user_last_login_null\n [X] 0006_require_contenttypes_0002\n [X] 0007_alter_validators_add_error_messages\n [X] 0008_alter_user_username_max_length\n [X] 0009_alter_user_last_name_max_length\n [X] 0010_alter_group_name_max_length\n [X] 0011_update_proxy_permissions\ncontenttypes\n [X] 0001_initial\n [X] 0002_remove_content_type_name\npolls_app\n [X] 0001_initial\nsessions\n [X] 0001_initial\n$\n```\n\n## Create some questions\n\nThis should look as follows (I have IPython installed so this will be verbose):\n\n```bash\n$ python3 manage.py shell\nPython 3.5.2 (default, Oct  8 2019, 13:06:37)\nType 'copyright', 'credits' or 'license' for more information\nIPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.\n\nIn [1]: from polls_app.models import Question, Choice\n\nIn [2]: Question.objects.all()\nOut[2]: \u003cQuerySet []\u003e\n\nIn [3]: from django.utils import timezone\n\nIn [4]: q = Question(question_text=\"What's new?\", pub_date=timezone.now())\n\nIn [5]: q.save()\n\nIn [6]: q.id\nOut[6]: 1\n\nIn [7]: Question.objects.all()\nOut[7]: \u003cQuerySet [\u003cQuestion: Question object (1)\u003e]\u003e\n\nIn [8]: quit()\n$\n```\n\nFor convenience lets add string methods to our models:\n\n```bash\n$ git diff polls_app/models.py\ndiff --git a/polls/polls_app/models.py b/polls/polls_app/models.py\nindex 48780e6..4855206 100644\n--- a/polls/polls_app/models.py\n+++ b/polls/polls_app/models.py\n@@ -4,9 +4,13 @@ from django.db import models\n class Question(models.Model):\n     question_text = models.CharField(max_length=200)\n     pub_date = models.DateTimeField('date published')\n+    def __str__(self):\n+        return self.question_text\n \n \n class Choice(models.Model):\n     question = models.ForeignKey(Question, on_delete=models.CASCADE)\n     choice_text = models.CharField(max_length=200)\n     votes = models.IntegerField(default=0)\n+    def __str__(self):\n+        return self.choice_text\n$\n```\n\nNow if we restart our API shell, we get more readable results:\n\n```bash\n$ python3 manage.py shell\nPython 3.5.2 (default, Oct  8 2019, 13:06:37)\nType 'copyright', 'credits' or 'license' for more information\nIPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.\n\nIn [1]: from polls_app.models import Question, Choice\n\nIn [2]: Question.objects.all()\nOut[2]: \u003cQuerySet [\u003cQuestion: What's new?\u003e]\u003e\n\nIn [3]:\n```\n\nLets add some answers:\n\n```bash\nIn [3]: q = Question.objects.get(pk=1)\n\nIn [4]: q.choice_set.all()\nOut[4]: \u003cQuerySet []\u003e\n\nIn [5]: q.choice_set.create(choice_text='Not much', votes=0)\nOut[5]: \u003cChoice: Not much\u003e\n\nIn [6]: q.choice_set.create(choice_text='The sky', votes=0)\nOut[6]: \u003cChoice: The sky\u003e\n\nIn [7]: q.choice_set.create(choice_text='Taxes', votes=0)\nOut[7]: \u003cChoice: Taxes\u003e\n\nIn [8]: q.choice_set.all()\nOut[8]: \u003cQuerySet [\u003cChoice: Not much\u003e, \u003cChoice: The sky\u003e, \u003cChoice: Taxes\u003e]\u003e\n\nIn [9]: q.choice_set.count()\n\nOut[9]: 3\n\nIn [10]: quit\n$\n```\n\n## Admin Creation\n\nLets create an Admin user:\n\n```bash\n$ python3 manage.py createsuperuser\nUsername (leave blank to use 'owner'): admin\nEmail address: admin@example.com\nPassword:\nPassword (again):\nSuperuser created successfully.\n$\n```\n\n[Password is `123abcde`.]\n\n## Admin Interface\n\nLets start the server and see if we can log in:\n\n```bash\n$ python3 manage.py runserver\nWatching for file changes with StatReloader\nPerforming system checks...\n\nSystem check identified no issues (0 silenced).\nNovember 26, 2019 - 19:51:08\nDjango version 2.2.7, using settings 'polls.settings'\nStarting development server at http://127.0.0.1:8000/\nQuit the server with CONTROL-C.\n[26/Nov/2019 19:51:21] \"GET /admin/ HTTP/1.1\" 302 0\n[26/Nov/2019 19:51:21] \"GET /admin/login/?next=/admin/ HTTP/1.1\" 200 1819\n[26/Nov/2019 19:51:21] \"GET /static/admin/css/fonts.css HTTP/1.1\" 304 0\n[26/Nov/2019 19:51:21] \"GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1\" 304 0\n[26/Nov/2019 19:51:21] \"GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1\" 304 0\n[26/Nov/2019 19:52:05] \"POST /admin/login/?next=/admin/ HTTP/1.1\" 302 0\n[26/Nov/2019 19:52:05] \"GET /admin/ HTTP/1.1\" 200 3042\n[26/Nov/2019 19:52:05] \"GET /static/admin/css/dashboard.css HTTP/1.1\" 200 412\n[26/Nov/2019 19:52:05] \"GET /static/admin/img/icon-addlink.svg HTTP/1.1\" 200 331\n[26/Nov/2019 19:52:05] \"GET /static/admin/img/icon-changelink.svg HTTP/1.1\" 200 380\n[26/Nov/2019 19:52:05] \"GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1\" 304 0\n^C$\n```\n\nThe logged-in interface at http://127.0.0.1:8000/admin/ should look as follows:\n\n![Admin_UI](images/Admin_UI.png)\n\nWe need to modify `polls_app/admin.py` to register Question as follows:\n\n```bash\n$ git diff polls_app/admin.py\ndiff --git a/polls/polls_app/admin.py b/polls/polls_app/admin.py\nindex 8c38f3f..6af8ff6 100644\n--- a/polls/polls_app/admin.py\n+++ b/polls/polls_app/admin.py\n@@ -1,3 +1,5 @@\n from django.contrib import admin\n \n-# Register your models here.\n+from .models import Question\n+\n+admin.site.register(Question)\n$\n```\n\nRestart our server:\n\n```bash\n$ python3 manage.py runserver\nWatching for file changes with StatReloader\nPerforming system checks...\n\nSystem check identified no issues (0 silenced).\nNovember 26, 2019 - 20:00:15\nDjango version 2.2.7, using settings 'polls.settings'\nStarting development server at http://127.0.0.1:8000/\nQuit the server with CONTROL-C.\n[26/Nov/2019 20:00:21] \"GET /admin/ HTTP/1.1\" 200 3749\n[26/Nov/2019 20:01:54] \"GET /admin/polls_app/question/ HTTP/1.1\" 200 4374\n[26/Nov/2019 20:01:54] \"GET /static/admin/css/changelists.css HTTP/1.1\" 200 6170\n[26/Nov/2019 20:01:54] \"GET /admin/jsi18n/ HTTP/1.1\" 200 3223\n[26/Nov/2019 20:01:54] \"GET /static/admin/js/jquery.init.js HTTP/1.1\" 200 363\n[26/Nov/2019 20:01:54] \"GET /static/admin/js/actions.js HTTP/1.1\" 200 6766\n[26/Nov/2019 20:01:54] \"GET /static/admin/js/core.js HTTP/1.1\" 200 7099\n[26/Nov/2019 20:01:54] \"GET /static/admin/js/urlify.js HTTP/1.1\" 200 8941\n[26/Nov/2019 20:01:54] \"GET /static/admin/js/admin/RelatedObjectLookups.js HTTP/1.1\" 200 6918\n[26/Nov/2019 20:01:54] \"GET /static/admin/js/vendor/jquery/jquery.js HTTP/1.1\" 200 271817\n[26/Nov/2019 20:01:54] \"GET /static/admin/js/vendor/xregexp/xregexp.js HTTP/1.1\" 200 128820\n[26/Nov/2019 20:01:54] \"GET /static/admin/js/prepopulate.js HTTP/1.1\" 200 1530\n[26/Nov/2019 20:01:54] \"GET /static/admin/img/tooltag-add.svg HTTP/1.1\" 200 331\n[26/Nov/2019 20:13:32] \"GET /static/admin/css/forms.css HTTP/1.1\" 200 8518\n[26/Nov/2019 20:13:32] \"GET /static/admin/js/change_form.js HTTP/1.1\" 200 712\n[26/Nov/2019 20:13:32] \"GET /static/admin/js/calendar.js HTTP/1.1\" 200 7777\n[26/Nov/2019 20:13:32] \"GET /static/admin/js/prepopulate_init.js HTTP/1.1\" 200 495\n[26/Nov/2019 20:13:32] \"GET /static/admin/js/admin/DateTimeShortcuts.js HTTP/1.1\" 200 20218\n[26/Nov/2019 20:13:32] \"GET /static/admin/css/widgets.css HTTP/1.1\" 200 10340\n[26/Nov/2019 20:13:32] \"GET /static/admin/img/icon-calendar.svg HTTP/1.1\" 200 1086\n[26/Nov/2019 20:13:32] \"GET /static/admin/img/icon-clock.svg HTTP/1.1\" 200 677\n[26/Nov/2019 20:17:52] \"POST /admin/polls_app/question/1/change/ HTTP/1.1\" 302 0\n[26/Nov/2019 20:17:52] \"GET /admin/polls_app/question/ HTTP/1.1\" 200 4572\n[26/Nov/2019 20:17:52] \"GET /admin/jsi18n/ HTTP/1.1\" 200 3223\n[26/Nov/2019 20:17:52] \"GET /static/admin/img/icon-yes.svg HTTP/1.1\" 200 436\n[26/Nov/2019 20:18:01] \"GET /admin/polls_app/question/1/change/ HTTP/1.1\" 200 5141\n[26/Nov/2019 20:18:02] \"GET /admin/jsi18n/ HTTP/1.1\" 200 3223\n[26/Nov/2019 20:18:05] \"GET /admin/polls_app/question/1/history/ HTTP/1.1\" 200 2319\n[26/Nov/2019 20:24:35] \"GET /admin/logout/ HTTP/1.1\" 200 1207\n^C$\n```\n\nAnd if we refresh our browser window we should get:\n\n![Admin_UI_with_Questions](images/Admin_UI_with_Questions.png)\n\nAnd now we can edit our Question:\n\n![Question](images/Question.png)\n\nAnd we even get a modification history:\n\n![Question changelog](images/Question_changelog.png)\n\n[END OF PART 2]\n\n## Versions\n\n* Django __2.2.7__\n* Python __3.5.2__\n\n## To Do\n\n- [ ] Follow parts 3 - 7 of this tutorial\n\n## Credits\n\nPart 1:\n\n    http://docs.djangoproject.com/en/2.2/intro/tutorial01/\n\nPart 2:\n\n    http://docs.djangoproject.com/en/2.2/intro/tutorial02/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmramshaw%2Fwriting_django_2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmramshaw%2Fwriting_django_2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmramshaw%2Fwriting_django_2/lists"}