Skip to content

Commit 543c729

Browse files
committed
step 6 done
1 parent 5453ba9 commit 543c729

16 files changed

+307
-28
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ dependencies = [
1010
"django-bootstrap5>=25.1",
1111
"gunicorn>=23.0.0",
1212
"make>=0.1.6.post2",
13+
"psycopg2-binary>=2.9.10",
1314
"pytest>=8.4.0",
1415
"pytest-django>=4.11.1",
1516
"python-dotenv>=1.1.0",

task_manager/forms.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
22
from django.contrib.auth.models import User
33
from django import forms
4-
from .models import Status, Task
4+
from .models import Status, Task, Label
55

66

7+
class LabelForm(forms.ModelForm):
8+
class Meta:
9+
model = Label
10+
fields = ['name']
11+
712
class UserRegisterForm(UserCreationForm):
813
class Meta:
914
model = User
@@ -21,7 +26,8 @@ class Meta:
2126
model = Status
2227
fields = ['name']
2328

29+
2430
class TaskForm(forms.ModelForm):
2531
class Meta:
2632
model = Task
27-
fields = ['title', 'description', 'assigned_to', 'status']
33+
fields = ['title', 'description', 'status', 'executor', 'labels']
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Generated by Django 5.2.1 on 2025-06-11 08:51
2+
3+
import django.db.models.deletion
4+
from django.conf import settings
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('task_manager', '0002_task'),
12+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='Label',
18+
fields=[
19+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20+
('name', models.CharField(max_length=100, unique=True)),
21+
('created_at', models.DateTimeField(auto_now_add=True)),
22+
],
23+
),
24+
migrations.RemoveField(
25+
model_name='task',
26+
name='assigned_to',
27+
),
28+
migrations.AddField(
29+
model_name='task',
30+
name='executor',
31+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='executed_tasks', to=settings.AUTH_USER_MODEL),
32+
),
33+
migrations.AlterField(
34+
model_name='task',
35+
name='status',
36+
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='task_manager.status'),
37+
),
38+
migrations.AddField(
39+
model_name='task',
40+
name='labels',
41+
field=models.ManyToManyField(blank=True, related_name='tasks', to='task_manager.label'),
42+
),
43+
]
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Generated by Django 5.2.1 on 2025-06-11 08:56
2+
3+
import django.utils.timezone
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('task_manager', '0003_label_remove_task_assigned_to_task_executor_and_more'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='status',
16+
name='created_at',
17+
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
18+
preserve_default=False,
19+
),
20+
migrations.AlterField(
21+
model_name='status',
22+
name='name',
23+
field=models.CharField(max_length=100, unique=True),
24+
),
25+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.2.1 on 2025-06-11 09:05
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('task_manager', '0004_status_created_at_alter_status_name'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='task',
15+
name='status',
16+
field=models.CharField(blank=True, max_length=100, null=True),
17+
),
18+
]

task_manager/models.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,34 @@
33
from django.contrib.auth.models import User
44

55
class Status(models.Model):
6-
name = models.CharField(max_length=100)
6+
name = models.CharField(max_length=100, unique=True)
7+
created_at = models.DateTimeField(auto_now_add=True)
8+
9+
def __str__(self):
10+
return self.name
11+
12+
13+
class Label(models.Model):
14+
name = models.CharField(max_length=100, unique=True)
15+
created_at = models.DateTimeField(auto_now_add=True)
716

817
def __str__(self):
918
return self.name
1019

11-
def get_absolute_url(self):
12-
return reverse('status-list')
1320

1421
class Task(models.Model):
1522
title = models.CharField(max_length=200)
1623
description = models.TextField()
17-
assigned_to = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
18-
status = models.CharField(max_length=50)
24+
executor = models.ForeignKey( # Изменили название поля
25+
User,
26+
on_delete=models.SET_NULL,
27+
null=True,
28+
blank=True,
29+
related_name='executed_tasks'
30+
)
31+
labels = models.ManyToManyField(Label, blank=True, related_name='tasks')
32+
status = models.CharField(max_length=100, blank=True, null=True)
1933
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='tasks_created')
2034
created_at = models.DateTimeField(auto_now_add=True)
2135

22-
def __str__(self):
23-
return self.title
36+

task_manager/settings.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,18 @@
9292

9393
DATABASES = {
9494
'default': {
95-
'ENGINE': 'django.db.backends.sqlite3',
96-
'NAME': BASE_DIR / 'db.sqlite3',
95+
'ENGINE': 'django.db.backends.postgresql',
96+
'NAME': 'djangobd',
97+
'USER': 'tirion', # Обычно 'postgres'
98+
'PASSWORD': '1234',
99+
'HOST': 'localhost',
100+
'PORT': '5432',
97101
}
98102
}
99103

100104

105+
AUTH_USER_MODEL = 'auth.User'
106+
101107
# Password validation
102108
# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators
103109

task_manager/templates/base.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
<li class="nav-item">
2828
<a class="nav-link" href="{% url 'task-list' %}">Задачи</a>
2929
</li>
30+
<li class="nav-item">
31+
<a class="nav-link" href="{% url 'label-list' %}">Метки</a>
32+
</li>
3033
<li class="nav-item">
3134
<form action="{% url 'logout' %}" method="post" style="display: inline;">
3235
{% csrf_token %}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{% extends "base.html" %}
2+
3+
{% block content %}
4+
<h1>Подтвердите удаление метки</h1>
5+
<p>Вы действительно хотите удалить метку: <strong>{{ object.name }}</strong>?</p>
6+
7+
<form method="post">
8+
{% csrf_token %}
9+
<button type="submit">Да, удалить</button>
10+
<a href="{% url 'label-list' %}">Отмена</a>
11+
</form>
12+
{% endblock %}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{% extends "base.html" %}
2+
3+
{% block content %}
4+
<h1>Create Label</h1>
5+
<form method="post">
6+
{% csrf_token %}
7+
{{ form.as_p }}
8+
<button type="submit">Save</button>
9+
</form>
10+
{% endblock %}

0 commit comments

Comments
 (0)