Коммит 61c892e9 создал по автору Кабанин Денис Андреевич's avatar Кабанин Денис Андреевич
Просмотр файлов

Слияние ветки 'issue188-190-adding-the-archive-page' с 'main'

Реализовал требования по issue 188-190

Посмотреть запрос на слияние romazanovrushan/Project-38!196
владельцы 36976947 72729122
# Generated by Django 4.2.3 on 2023-10-14 16:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("projects", "0003_project__level"),
]
operations = [
migrations.AddField(
model_name="project",
name="defence_video",
field=models.CharField(max_length=200, null=True),
),
]
......@@ -25,6 +25,7 @@ class Project(Model):
target = CharField(max_length=1000, null=True)
tasks = CharField(max_length=1000, null=True)
expected_results = CharField(max_length=1000, null=True)
defence_video = CharField(max_length=200, null=True)
# фильтрация предметов при записи их в бд(что бы не удалось поставить не существующий предмет
def set_subject(self, subjects: str):
......
......@@ -14,5 +14,6 @@ urlpatterns = [
path('add_comment', views.set_comment, name='add_comment'), # добавление комментария к файлу
path('approve_project', views.approve_project, name='approve_project'), # одобрение заявки на проект
path('close_project', views.close_project, name='close_project'), # закрытие работы над проектом
path("restore_file", views.restore_file, name='restore_file') # восстановление файла из корзины
path("restore_file", views.restore_file, name='restore_file'), # восстановление файла из корзины
path('archive', views.archive, name='archive'),
]
......@@ -419,3 +419,24 @@ def close_project(request: HttpRequest):
return render(request, "WrongData.html")
except BaseException:
return render(request, "FatalError.html")
def archive(request:HttpRequest):
projects = Project.objects.filter(_status='done')[0:20]
# упаковка проектов и файлов в один массив состоящий из объектов класса ProjectPack
context_projects = []
for project in projects:
abstract_file = File.objects.filter(project=project, version=1, _tag='Реферат').first()
presentation_file = File.objects.filter(project=project, version=1, _tag='Презентация').first()
annotation_file = File.objects.filter(project=project, version=1, _tag='Аннотация').first()
variables = vars(project)
values = {key : val for key, val in zip(variables.keys(), variables.values()) if key != '_state'}
values.update({'abstruct': abstract_file,
'presentation': presentation_file,
'annotation': annotation_file})
context_projects.append(values.copy())
return render(request, 'projects/archive.html', context={'projects':context_projects})
......@@ -34,7 +34,7 @@
<a href="#contests">Конкурсы</a>
</li>
<li class="nav-item">
<a href="#">Архив работ</a>
<a href="{% url 'archive' %}">Архив работ</a>
</li>
<li class="nav-item">
<a href="{% url 'announcements' %}">Новости</a>
......
{% load static %}
{% block head %}
<title>Архив работ</title>
{% endblock head %}
{% block content %}
{%for project in projects%}
<div>
<span>{{project.name}}</span>
{% if user.is_authenticated%}
<a href="{% url 'projects' %}?id={{project.abstruct.id}}" title="Загрузить файл" class="download-link">Реферат</a>
{% endif %}
<a href="{% url 'projects' %}?id={{project.defence.id}}" title="Загрузить файл" class="download-link">Защита</a>
<a href="{% url 'download_file' %}?file_id={{project.presentation.id}}" title="Загрузить файл" class="download-link">Презентация</a>
{% if project.defence_video is not null%}
<a href="{{project.defence_video}}" title="Загрузить файл" class="download-link">Видео с защиты</a>
{% endif %}
</div>
{%endfor%}
{% endblock content %}
\ Нет новой строки в конце файла
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать