Skip to content

Commit 414e29e

Browse files
committed
add start date to movies
1 parent d7481b5 commit 414e29e

File tree

7 files changed

+50
-19
lines changed

7 files changed

+50
-19
lines changed

src/app/forms.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ def __init__(self: "MovieForm", *args: dict, **kwargs: dict) -> None:
145145
"media_type",
146146
"score",
147147
"status",
148+
"start_date",
148149
"end_date",
149150
"notes",
150151
)
@@ -153,7 +154,7 @@ class Meta(MediaForm.Meta):
153154
"""Bind form to model."""
154155

155156
model = Movie
156-
exclude = ("progress", "start_date")
157+
exclude = ("progress",)
157158

158159

159160
class TVForm(MediaForm):
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 4.2.5 on 2024-02-02 14:31
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
("app", "0003_alter_anime_status_alter_manga_status_and_more"),
9+
]
10+
11+
operations = [
12+
migrations.AddField(
13+
model_name="movie",
14+
name="start_date",
15+
field=models.DateField(blank=True, null=True),
16+
),
17+
]

src/app/models.py

-2
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,6 @@ class Anime(Media):
132132
class Movie(Media):
133133
"""Model for movies."""
134134

135-
start_date = None
136-
137135
@property
138136
def progress(self: "Movie") -> int:
139137
"""Return 1 if the movie is completed."""

src/app/tests/test_media.py

+2
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ def test_edit_movie_score(self):
101101
status="Completed",
102102
user=self.user,
103103
notes="Nice",
104+
start_date=date(2023, 6, 1),
104105
end_date=date(2023, 6, 1),
105106
)
106107

@@ -250,6 +251,7 @@ def test_delete_movie(self):
250251
status="Completed",
251252
user=self.user,
252253
notes="Nice",
254+
start_date=date(2023, 6, 1),
253255
end_date=date(2023, 6, 1),
254256
)
255257

src/app/utils/helpers.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ def media_type_mapper(media_type: str) -> dict:
8383
"form": MangaForm,
8484
"list_layout": "app/media_table.html",
8585
"sort_choices": [
86-
("-score", "Score"),
86+
("score", "Score"),
8787
("title", "Title"),
88-
("-progress", "Progress"),
88+
("progress", "Progress"),
8989
("start_date", "Start Date"),
9090
("end_date", "End Date"),
9191
],
@@ -95,9 +95,9 @@ def media_type_mapper(media_type: str) -> dict:
9595
"form": AnimeForm,
9696
"list_layout": "app/media_table.html",
9797
"sort_choices": [
98-
("-score", "Score"),
98+
("score", "Score"),
9999
("title", "Title"),
100-
("-progress", "Progress"),
100+
("progress", "Progress"),
101101
("start_date", "Start Date"),
102102
("end_date", "End Date"),
103103
],
@@ -107,8 +107,9 @@ def media_type_mapper(media_type: str) -> dict:
107107
"form": MovieForm,
108108
"list_layout": "app/media_grid.html",
109109
"sort_choices": [
110-
("-score", "Score"),
110+
("score", "Score"),
111111
("title", "Title"),
112+
("start_date", "Start Date"),
112113
("end_date", "End Date"),
113114
],
114115
},
@@ -117,7 +118,7 @@ def media_type_mapper(media_type: str) -> dict:
117118
"form": TVForm,
118119
"list_layout": "app/media_grid.html",
119120
"sort_choices": [
120-
("-score", "Score"),
121+
("score", "Score"),
121122
("title", "Title"),
122123
],
123124
},
@@ -126,9 +127,9 @@ def media_type_mapper(media_type: str) -> dict:
126127
"form": SeasonForm,
127128
"list_layout": "app/media_grid.html",
128129
"sort_choices": [
129-
("-score", "Score"),
130+
("score", "Score"),
130131
("title", "Title"),
131-
("-progress", "Progress"),
132+
("progress", "Progress"),
132133
("start_date", "Start Date"),
133134
("end_date", "End Date"),
134135
],

src/app/views.py

+19-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import datetime
22
import logging
3-
from itertools import chain
43

54
from django.conf import settings
5+
from django.db.models import F
66
from django.http import HttpRequest, HttpResponse
77
from django.shortcuts import redirect, render
88

@@ -19,7 +19,8 @@ def home(request: HttpRequest) -> HttpResponse:
1919
in_progress = {}
2020

2121
seasons = Season.objects.filter(
22-
user_id=request.user, status="In progress",
22+
user_id=request.user,
23+
status="In progress",
2324
).prefetch_related("episodes")
2425

2526
if seasons.exists():
@@ -138,7 +139,7 @@ def media_list(request: HttpRequest, media_type: str) -> HttpResponse:
138139
filter_params["status"] = status_filter.capitalize()
139140

140141
# default sort by descending score
141-
sort_filter = request.GET.get("sort", "-score")
142+
sort_filter = request.GET.get("sort", "score")
142143

143144
media_mapping = helpers.media_type_mapper(media_type)
144145
filter_form = FilterForm(
@@ -150,11 +151,21 @@ def media_list(request: HttpRequest, media_type: str) -> HttpResponse:
150151

151152
# if form valid or no form submitted
152153
if filter_form.is_valid() or not request.GET:
153-
media_list = (
154-
media_mapping["model"]
155-
.objects.filter(**filter_params)
156-
.order_by(sort_filter)
157-
)
154+
155+
# asc order
156+
if sort_filter == "title":
157+
media_list = (
158+
media_mapping["model"]
159+
.objects.filter(**filter_params)
160+
.order_by(F(sort_filter).asc(nulls_last=True))
161+
)
162+
# desc order
163+
else:
164+
media_list = (
165+
media_mapping["model"]
166+
.objects.filter(**filter_params)
167+
.order_by(F(sort_filter).desc(nulls_last=True))
168+
)
158169

159170
return render(
160171
request,

src/integrations/tests/test_exports.py

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def setUp(self: "ExportCSVTest") -> None:
3434
status="Completed",
3535
user=self.user,
3636
notes="Nice",
37+
start_date=date(2023, 6, 1),
3738
end_date=date(2023, 6, 1),
3839
)
3940

0 commit comments

Comments
 (0)