Skip to content

Commit 2f862f5

Browse files
authored
Merge pull request #2 from olyapka84/codex/review-project-for-consistency-and-quality
Align task/status route naming and user display helpers
2 parents 53d81ce + 88bc6eb commit 2f862f5

File tree

16 files changed

+86
-59
lines changed

16 files changed

+86
-59
lines changed

task_manager/statuses/urls.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
from django.urls import path
2+
23
from .views import (
3-
StatusListView, StatusCreateView, StatusUpdateView, StatusDeleteView
4+
StatusCreateView,
5+
StatusDeleteView,
6+
StatusListView,
7+
StatusUpdateView,
48
)
59

10+
app_name = "statuses"
11+
612
urlpatterns = [
7-
path("", StatusListView.as_view(), name="statuses_index"),
8-
path("create/", StatusCreateView.as_view(), name="statuses_create"),
9-
path("<int:pk>/update/", StatusUpdateView.as_view(),
10-
name="statuses_update"),
11-
path("<int:pk>/delete/", StatusDeleteView.as_view(),
12-
name="statuses_delete"),
13+
path("", StatusListView.as_view(), name="index"),
14+
path("create/", StatusCreateView.as_view(), name="create"),
15+
path("<int:pk>/update/", StatusUpdateView.as_view(), name="update"),
16+
path("<int:pk>/delete/", StatusDeleteView.as_view(), name="delete"),
1317
]

task_manager/statuses/views.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from django.contrib.auth.mixins import LoginRequiredMixin
33
from django.shortcuts import redirect
44
from django.urls import reverse_lazy
5-
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
5+
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
66

77
from .models import Status
88
from .forms import StatusForm
@@ -19,7 +19,7 @@ class StatusCreateView(LoginRequiredMixin, CreateView):
1919
model = Status
2020
form_class = StatusForm
2121
template_name = "statuses/form.html"
22-
success_url = reverse_lazy("statuses_index")
22+
success_url = reverse_lazy("statuses:index")
2323
login_url = "users:login"
2424

2525
def form_valid(self, form):
@@ -31,7 +31,7 @@ class StatusUpdateView(LoginRequiredMixin, UpdateView):
3131
model = Status
3232
form_class = StatusForm
3333
template_name = "statuses/form.html"
34-
success_url = reverse_lazy("statuses_index")
34+
success_url = reverse_lazy("statuses:index")
3535
login_url = "users:login"
3636

3737
def form_valid(self, form):
@@ -42,16 +42,17 @@ def form_valid(self, form):
4242
class StatusDeleteView(LoginRequiredMixin, DeleteView):
4343
model = Status
4444
template_name = "statuses/confirm_delete.html"
45-
success_url = reverse_lazy("statuses_index")
45+
success_url = reverse_lazy("statuses:index")
4646
login_url = "users:login"
4747

4848
def post(self, request, *args, **kwargs):
4949
status = self.get_object()
5050
if status.tasks.exists():
51-
messages.error(request,
52-
"Невозможно удалить статус, "
53-
"потому что он используется")
54-
return redirect("statuses_index")
51+
messages.error(
52+
request,
53+
"Невозможно удалить статус, потому что он используется",
54+
)
55+
return redirect("statuses:index")
5556
response = super().post(request, *args, **kwargs)
5657
messages.success(request, "Статус успешно удален")
5758
return response

task_manager/tasks/filters.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
# tasks/filters.py
21
import django_filters as df
32
from django import forms
43
from django.contrib.auth import get_user_model
5-
from .models import Task
6-
from task_manager.statuses.models import Status
4+
75
from task_manager.labels.models import Label
6+
from task_manager.statuses.models import Status
7+
from task_manager.users.utils import format_user_display
8+
9+
from .models import Task
810

911
User = get_user_model()
1012

@@ -40,10 +42,7 @@ def __init__(self, data=None, queryset=None, request=None, **kwargs):
4042
super().__init__(data=data, queryset=queryset,
4143
request=request, **kwargs)
4244
self.request = request
43-
self.filters["executor"].field.label_from_instance = (
44-
lambda u: (u.get_full_name().strip()
45-
if (u.get_full_name() or "").strip() else u.username)
46-
)
45+
self.filters["executor"].field.label_from_instance = format_user_display
4746

4847
def filter_self_tasks(self, queryset, name, value):
4948
return queryset.filter(author=self.request.user) if value else queryset

task_manager/tasks/forms.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
from django import forms
22
from django.contrib.auth import get_user_model
3+
4+
from task_manager.users.utils import format_user_display
5+
36
from .models import Task
47

58
User = get_user_model()
@@ -29,8 +32,4 @@ class Meta:
2932
def __init__(self, *args, **kwargs):
3033
super().__init__(*args, **kwargs)
3134
self.fields["executor"].queryset = User.objects.all().order_by("id")
32-
33-
def user_label(u):
34-
full = (u.get_full_name() or "").strip()
35-
return full if full else u.username
36-
self.fields["executor"].label_from_instance = user_label
35+
self.fields["executor"].label_from_instance = format_user_display

task_manager/tasks/models.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
from django.conf import settings
12
from django.db import models
2-
from django.contrib.auth.models import User
33

44
from task_manager.labels.models import Label
55
from task_manager.statuses.models import Status
@@ -10,10 +10,18 @@ class Task(models.Model):
1010
description = models.TextField(blank=True)
1111
status = models.ForeignKey(Status, on_delete=models.PROTECT,
1212
related_name="tasks")
13-
author = models.ForeignKey(User, on_delete=models.PROTECT,
14-
related_name="created_tasks")
15-
executor = models.ForeignKey(User, on_delete=models.PROTECT, null=True,
16-
blank=True, related_name="executed_tasks")
13+
author = models.ForeignKey(
14+
settings.AUTH_USER_MODEL,
15+
on_delete=models.PROTECT,
16+
related_name="created_tasks",
17+
)
18+
executor = models.ForeignKey(
19+
settings.AUTH_USER_MODEL,
20+
on_delete=models.PROTECT,
21+
null=True,
22+
blank=True,
23+
related_name="executed_tasks",
24+
)
1725
created_at = models.DateTimeField(auto_now_add=True)
1826
labels = models.ManyToManyField(Label, related_name="labeled_tasks",
1927
blank=True)

task_manager/tasks/urls.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
from django.urls import path
2+
23
from .views import (
3-
TaskListView, TaskCreateView, TaskUpdateView, TaskDeleteView, TaskDetailView
4+
TaskCreateView,
5+
TaskDeleteView,
6+
TaskDetailView,
7+
TaskListView,
8+
TaskUpdateView,
49
)
510

11+
app_name = "tasks"
12+
613
urlpatterns = [
7-
path("", TaskListView.as_view(), name="tasks_index"),
8-
path("create/", TaskCreateView.as_view(), name="tasks_create"),
9-
path("<int:pk>/", TaskDetailView.as_view(), name="tasks_detail"),
10-
path("<int:pk>/update/", TaskUpdateView.as_view(), name="tasks_update"),
11-
path("<int:pk>/delete/", TaskDeleteView.as_view(), name="tasks_delete"),
14+
path("", TaskListView.as_view(), name="index"),
15+
path("create/", TaskCreateView.as_view(), name="create"),
16+
path("<int:pk>/", TaskDetailView.as_view(), name="detail"),
17+
path("<int:pk>/update/", TaskUpdateView.as_view(), name="update"),
18+
path("<int:pk>/delete/", TaskDeleteView.as_view(), name="delete"),
1219
]

task_manager/tasks/views.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
33
from django.shortcuts import redirect
44
from django.urls import reverse_lazy
5-
from django.views.generic import CreateView, UpdateView, DeleteView, DetailView
5+
from django.views.generic import CreateView, DeleteView, DetailView, UpdateView
66
from django_filters.views import FilterView
77

88
from .filters import TaskFilter
@@ -37,7 +37,7 @@ class TaskCreateView(LoginRequiredMixin, CreateView):
3737
model = Task
3838
form_class = TaskForm
3939
template_name = "tasks/form.html"
40-
success_url = reverse_lazy("tasks_index")
40+
success_url = reverse_lazy("tasks:index")
4141
login_url = "users:login"
4242

4343
def form_valid(self, form):
@@ -50,7 +50,7 @@ class TaskUpdateView(LoginRequiredMixin, UpdateView):
5050
model = Task
5151
form_class = TaskForm
5252
template_name = "tasks/form.html"
53-
success_url = reverse_lazy("tasks_index")
53+
success_url = reverse_lazy("tasks:index")
5454
login_url = "users:login"
5555

5656
def form_valid(self, form):
@@ -61,7 +61,7 @@ def form_valid(self, form):
6161
class TaskDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
6262
model = Task
6363
template_name = "tasks/confirm_delete.html"
64-
success_url = reverse_lazy("tasks_index")
64+
success_url = reverse_lazy("tasks:index")
6565
login_url = "users:login"
6666

6767
def test_func(self):
@@ -70,7 +70,7 @@ def test_func(self):
7070
def handle_no_permission(self):
7171
if self.request.user.is_authenticated:
7272
messages.error(self.request, "Задачу может удалить только ее автор")
73-
return redirect("tasks_index")
73+
return redirect("tasks:index")
7474
return super().handle_no_permission()
7575

7676
def post(self, request, *args, **kwargs):

task_manager/templates/base.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@
3939

4040
{% if user.is_authenticated %}
4141
<li class="nav-item">
42-
<a class="nav-link" href="{% url 'statuses_index' %}">Статусы</a>
42+
<a class="nav-link" href="{% url 'statuses:index' %}">Статусы</a>
4343
</li>
4444
<li class="nav-item">
45-
<a class="nav-link" href="{% url 'tasks_index' %}">Задачи</a>
45+
<a class="nav-link" href="{% url 'tasks:index' %}">Задачи</a>
4646
</li>
4747
<li class="nav-item">
4848
<a class="nav-link" href="{% url 'labels:index' %}">Метки</a>

task_manager/templates/statuses/confirm_delete.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ <h1>Удалить статус</h1>
66
<form method="post">
77
{% csrf_token %}
88
<button type="submit" class="btn btn-danger">Да, удалить</button>
9-
<a href="{% url 'statuses_index' %}" class="btn btn-link">Отмена</a>
9+
<a href="{% url 'statuses:index' %}" class="btn btn-link">Отмена</a>
1010
</form>
1111
{% endblock %}

task_manager/templates/statuses/form.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ <h1>{% if object %}Изменить статус{% else %}Создать ста
1515
<button type="submit" class="btn btn-primary">
1616
{% if object %}Изменить{% else %}Создать{% endif %}
1717
</button>
18-
<a href="{% url 'statuses_index' %}" class="btn btn-link">Отмена</a>
18+
<a href="{% url 'statuses:index' %}" class="btn btn-link">Отмена</a>
1919
</form>
2020
{% endblock %}

0 commit comments

Comments
 (0)