From fc715c3cede69c90f069421b33536b93bb3767f1 Mon Sep 17 00:00:00 2001 From: Ray Lyon Date: Sat, 28 Feb 2026 13:04:19 -0500 Subject: [PATCH] initial movies app --- apps/movies/__init__.py | 0 apps/movies/admin.py | 9 ++++ apps/movies/apps.py | 5 ++ apps/movies/migrations/0001_initial.py | 32 ++++++++++++ ...ate_remove_movie_media_formats_and_more.py | 26 ++++++++++ .../migrations/0003_movie_added_date.py | 20 +++++++ apps/movies/migrations/__init__.py | 0 apps/movies/models.py | 21 ++++++++ apps/movies/templates/movies/index.html | 52 +++++++++++++++++++ apps/movies/tests.py | 3 ++ apps/movies/urls.py | 7 +++ apps/movies/views.py | 18 +++++++ apps/polls/admin.py | 3 +- django_movies/settings.py | 1 + django_movies/urls.py | 1 + 15 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 apps/movies/__init__.py create mode 100644 apps/movies/admin.py create mode 100644 apps/movies/apps.py create mode 100644 apps/movies/migrations/0001_initial.py create mode 100644 apps/movies/migrations/0002_remove_movie_pub_date_remove_movie_media_formats_and_more.py create mode 100644 apps/movies/migrations/0003_movie_added_date.py create mode 100644 apps/movies/migrations/__init__.py create mode 100644 apps/movies/models.py create mode 100644 apps/movies/templates/movies/index.html create mode 100644 apps/movies/tests.py create mode 100644 apps/movies/urls.py create mode 100644 apps/movies/views.py diff --git a/apps/movies/__init__.py b/apps/movies/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/movies/admin.py b/apps/movies/admin.py new file mode 100644 index 0000000..91cb410 --- /dev/null +++ b/apps/movies/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +from .models import MediaFormat, Movie + +# Register your models here. + +# Register your models here. +admin.site.register(Movie) +admin.site.register(MediaFormat) diff --git a/apps/movies/apps.py b/apps/movies/apps.py new file mode 100644 index 0000000..0f5bdfb --- /dev/null +++ b/apps/movies/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class MoviesConfig(AppConfig): + name = "apps.movies" diff --git a/apps/movies/migrations/0001_initial.py b/apps/movies/migrations/0001_initial.py new file mode 100644 index 0000000..a8e7d32 --- /dev/null +++ b/apps/movies/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# Generated by Django 6.0 on 2026-02-28 17:08 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='MediaFormat', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50)), + ], + ), + migrations.CreateModel( + name='Movie', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('release_date', models.DateField()), + ('pub_date', models.DateTimeField(verbose_name='date published')), + ('media_formats', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='movies.mediaformat')), + ], + ), + ] diff --git a/apps/movies/migrations/0002_remove_movie_pub_date_remove_movie_media_formats_and_more.py b/apps/movies/migrations/0002_remove_movie_pub_date_remove_movie_media_formats_and_more.py new file mode 100644 index 0000000..17fc704 --- /dev/null +++ b/apps/movies/migrations/0002_remove_movie_pub_date_remove_movie_media_formats_and_more.py @@ -0,0 +1,26 @@ +# Generated by Django 6.0 on 2026-02-28 17:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('movies', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='movie', + name='pub_date', + ), + migrations.RemoveField( + model_name='movie', + name='media_formats', + ), + migrations.AddField( + model_name='movie', + name='media_formats', + field=models.ManyToManyField(to='movies.mediaformat'), + ), + ] diff --git a/apps/movies/migrations/0003_movie_added_date.py b/apps/movies/migrations/0003_movie_added_date.py new file mode 100644 index 0000000..0af469e --- /dev/null +++ b/apps/movies/migrations/0003_movie_added_date.py @@ -0,0 +1,20 @@ +# Generated by Django 6.0 on 2026-02-28 17:38 + +import django.utils.timezone +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('movies', '0002_remove_movie_pub_date_remove_movie_media_formats_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='movie', + name='added_date', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + ] diff --git a/apps/movies/migrations/__init__.py b/apps/movies/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/movies/models.py b/apps/movies/models.py new file mode 100644 index 0000000..4fa11c8 --- /dev/null +++ b/apps/movies/models.py @@ -0,0 +1,21 @@ +from django.db import models +from django.utils import timezone + + +# Create your models here. +class MediaFormat(models.Model): + name = models.CharField(max_length=50) + + def __str__(self): + return self.name + + +class Movie(models.Model): + title = models.CharField(max_length=200) + release_date = models.DateField() + media_formats = models.ManyToManyField(MediaFormat) + + added_date = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return self.title diff --git a/apps/movies/templates/movies/index.html b/apps/movies/templates/movies/index.html new file mode 100644 index 0000000..c4c8cb2 --- /dev/null +++ b/apps/movies/templates/movies/index.html @@ -0,0 +1,52 @@ + +Movies Homepage + + + + + + + + + + + + + + {% for m in latest_movies %} + + + + + + + {% endfor %} + +
TitleRelease DateDate AddedFormats
{{ m.title }}{{ m.release_date }}{{ m.added_date }}{{ m.media_formats }}
diff --git a/apps/movies/tests.py b/apps/movies/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/apps/movies/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/apps/movies/urls.py b/apps/movies/urls.py new file mode 100644 index 0000000..1249c1c --- /dev/null +++ b/apps/movies/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + path("", views.IndexView.as_view(), name="index"), +] diff --git a/apps/movies/views.py b/apps/movies/views.py new file mode 100644 index 0000000..9d371c6 --- /dev/null +++ b/apps/movies/views.py @@ -0,0 +1,18 @@ +from django.http import HttpResponse +from django.shortcuts import render +from django.views import generic + +from .models import Movie + + +def index(request): + return HttpResponse("Hello, world. You're at the movies index.") + + +class IndexView(generic.ListView): + template_name = "movies/index.html" + context_object_name = "latest_movies" + + def get_queryset(self): + """Return the last five published questions.""" + return Movie.objects.order_by("-added_date")[:5] diff --git a/apps/polls/admin.py b/apps/polls/admin.py index 4cfee41..11b6d0e 100644 --- a/apps/polls/admin.py +++ b/apps/polls/admin.py @@ -1,6 +1,7 @@ from django.contrib import admin -from .models import Question +from .models import Choice, Question # Register your models here. admin.site.register(Question) +admin.site.register(Choice) diff --git a/django_movies/settings.py b/django_movies/settings.py index 71ee1cc..f05987f 100644 --- a/django_movies/settings.py +++ b/django_movies/settings.py @@ -32,6 +32,7 @@ ALLOWED_HOSTS = [] INSTALLED_APPS = [ "apps.polls.apps.PollsConfig", + "apps.movies.apps.MoviesConfig", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", diff --git a/django_movies/urls.py b/django_movies/urls.py index 1561e07..30441b0 100644 --- a/django_movies/urls.py +++ b/django_movies/urls.py @@ -21,4 +21,5 @@ from django.urls import include, path urlpatterns = [ path("admin/", admin.site.urls), path("polls/", include("apps.polls.urls")), + path("", include("apps.movies.urls")), ]