Skip to content

Commit a3ecd66

Browse files
committed
statuses added2
1 parent 59cf424 commit a3ecd66

File tree

8 files changed

+99
-0
lines changed

8 files changed

+99
-0
lines changed

statuses/__init__.py

Whitespace-only changes.

statuses/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

statuses/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class StatusesConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'statuses'
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Generated by Django 5.2.7 on 2025-10-04 20:53
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
initial = True
9+
10+
dependencies = [
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name='Status',
16+
fields=[
17+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18+
('name', models.CharField(max_length=100, unique=True)),
19+
('created_at', models.DateTimeField(auto_now_add=True)),
20+
],
21+
options={
22+
'ordering': ['id'],
23+
},
24+
),
25+
]

statuses/migrations/__init__.py

Whitespace-only changes.

statuses/models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from django.db import models
2+
3+
4+
class Status(models.Model):
5+
name = models.CharField(max_length=100, unique=True)
6+
created_at = models.DateTimeField(auto_now_add=True)
7+
8+
class Meta:
9+
ordering = ['id']
10+
11+
def __str__(self):
12+
return self.name

statuses/tests.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

statuses/views.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from django.contrib import messages
2+
from django.contrib.auth.mixins import LoginRequiredMixin
3+
from django.urls import reverse_lazy
4+
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
5+
from django.db.models import ProtectedError
6+
7+
from .models import Status
8+
from .forms import StatusForm
9+
10+
class StatusListView(LoginRequiredMixin, ListView):
11+
model = Status
12+
template_name = "statuses/index.html"
13+
context_object_name = "statuses"
14+
login_url = "login"
15+
16+
class StatusCreateView(LoginRequiredMixin, CreateView):
17+
model = Status
18+
form_class = StatusForm
19+
template_name = "statuses/form.html"
20+
success_url = reverse_lazy("statuses_index")
21+
login_url = "login"
22+
23+
def form_valid(self, form):
24+
messages.success(self.request, "Статус создан.")
25+
return super().form_valid(form)
26+
27+
class StatusUpdateView(LoginRequiredMixin, UpdateView):
28+
model = Status
29+
form_class = StatusForm
30+
template_name = "statuses/form.html"
31+
success_url = reverse_lazy("statuses_index")
32+
login_url = "login"
33+
34+
def form_valid(self, form):
35+
messages.success(self.request, "Статус обновлён.")
36+
return super().form_valid(form)
37+
38+
class StatusDeleteView(LoginRequiredMixin, DeleteView):
39+
model = Status
40+
template_name = "statuses/confirm_delete.html"
41+
success_url = reverse_lazy("statuses_index")
42+
login_url = "login"
43+
44+
def post(self, request, *args, **kwargs):
45+
try:
46+
messages.success(self.request, "Статус удалён.")
47+
return super().post(request, *args, **kwargs)
48+
except ProtectedError:
49+
messages.error(self.request, "Нельзя удалить статус: есть связанные задачи.")
50+
return self.get(request, *args, **kwargs)

0 commit comments

Comments
 (0)