Skip to content

Commit 5453ba9

Browse files
committed
step 5 done
1 parent 1fbea4d commit 5453ba9

File tree

16 files changed

+327
-23
lines changed

16 files changed

+327
-23
lines changed

db.sqlite3

12 KB
Binary file not shown.

hexletcode/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@
2020
urlpatterns = [
2121
path('', include('task_manager.urls')),
2222
]
23+

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ dependencies = [
1010
"django-bootstrap5>=25.1",
1111
"gunicorn>=23.0.0",
1212
"make>=0.1.6.post2",
13+
"pytest>=8.4.0",
14+
"pytest-django>=4.11.1",
1315
"python-dotenv>=1.1.0",
1416
"ruff>=0.11.11",
1517
]

pytest.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[pytest]
2+
DJANGO_SETTINGS_MODULE = task_manager.settings
3+
python_files = tests.py test_*.py *_tests.py

task_manager/forms.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
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
4+
from .models import Status, Task
5+
56

67
class UserRegisterForm(UserCreationForm):
78
class Meta:
@@ -18,4 +19,9 @@ class Meta:
1819
class StatusForm(forms.ModelForm):
1920
class Meta:
2021
model = Status
21-
fields = ['name']
22+
fields = ['name']
23+
24+
class TaskForm(forms.ModelForm):
25+
class Meta:
26+
model = Task
27+
fields = ['title', 'description', 'assigned_to', 'status']
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Generated by Django 5.2.1 on 2025-06-09 14:42
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', '0001_initial'),
12+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='Task',
18+
fields=[
19+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20+
('title', models.CharField(max_length=200)),
21+
('description', models.TextField()),
22+
('status', models.CharField(max_length=50)),
23+
('created_at', models.DateTimeField(auto_now_add=True)),
24+
('assigned_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
25+
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tasks_created', to=settings.AUTH_USER_MODEL)),
26+
],
27+
),
28+
]

task_manager/models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.db import models
22
from django.urls import reverse
3+
from django.contrib.auth.models import User
34

45
class Status(models.Model):
56
name = models.CharField(max_length=100)
@@ -9,3 +10,14 @@ def __str__(self):
910

1011
def get_absolute_url(self):
1112
return reverse('status-list')
13+
14+
class Task(models.Model):
15+
title = models.CharField(max_length=200)
16+
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)
19+
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='tasks_created')
20+
created_at = models.DateTimeField(auto_now_add=True)
21+
22+
def __str__(self):
23+
return self.title

task_manager/templates/base.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,19 @@
2424
<li class="nav-item">
2525
<a class="nav-link" href="{% url 'status-list' %}">Статусы</a>
2626
</li>
27+
<li class="nav-item">
28+
<a class="nav-link" href="{% url 'task-list' %}">Задачи</a>
29+
</li>
2730
<li class="nav-item">
2831
<form action="{% url 'logout' %}" method="post" style="display: inline;">
2932
{% csrf_token %}
3033
<button type="submit" class="btn btn-link nav-link">Выход</button>
3134
</form>
3235
</li>
3336
{% else %}
37+
<li class="nav-item">
38+
<a class="nav-link" href="{% url 'user-list' %}">Пользователи</a>
39+
</li>
3440
<li class="nav-item">
3541
<a class="nav-link" href="{% url 'login' %}">Вход</a>
3642
</li>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{% extends "base.html" %}
2+
{% block content %}
3+
<h2>Удалить задачу "{{ task.title }}"?</h2>
4+
<form method="post">
5+
{% csrf_token %}
6+
<button type="submit">Подтвердить удаление</button>
7+
</form>
8+
<a href="{% url 'task-list' %}">Отмена</a>
9+
{% endblock %}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{% extends "base.html" %}
2+
{% block content %}
3+
<h2>{{ task.title }}</h2>
4+
<p><strong>Описание:</strong> {{ task.description }}</p>
5+
<p><strong>Статус:</strong> {{ task.status }}</p>
6+
<p><strong>Назначена:</strong> {{ task.assigned_to }}</p>
7+
<p><strong>Автор:</strong> {{ task.author }}</p>
8+
<a href="{% url 'task-update' task.pk %}">Редактировать</a> |
9+
<a href="{% url 'task-delete' task.pk %}">Удалить</a> |
10+
<a href="{% url 'task-list' %}">Назад</a>
11+
{% endblock %}

0 commit comments

Comments
 (0)