From 07e773ef87e72f2cca0e833d5e374893a5cccf3e Mon Sep 17 00:00:00 2001 From: Yuri Pomazkin <1yunker@gmail.com> Date: Sat, 18 Nov 2023 01:06:37 +0500 Subject: [PATCH 1/3] Update django admin actions in projects --- backend/api/serializers.py | 3 +- backend/backend/settings.py | 27 ++++---- backend/projects/admin.py | 63 ++++++++++++++----- ...in_comments_alter_project_name_and_more.py | 56 +++++++++++++++++ backend/projects/models.py | 11 ++++ backend/requirements.txt | 1 + 6 files changed, 133 insertions(+), 28 deletions(-) create mode 100644 backend/projects/migrations/0002_project_admin_comments_alter_project_name_and_more.py diff --git a/backend/api/serializers.py b/backend/api/serializers.py index e01a1a4..a01cc72 100644 --- a/backend/api/serializers.py +++ b/backend/api/serializers.py @@ -175,6 +175,7 @@ def get_status(self, data): CLOSED = 'reception_of_responses_closed' COMPLETED = 'project_completed' CANCELED = 'canceled_by_organizer' + EDITING = 'editing' # now = timezone.now() # if data.status_approve == Project.CANCELED_BY_ORGANIZER: @@ -204,7 +205,7 @@ def get_status(self, data): return CLOSED elif data.end_datetime <= now: return COMPLETED - return 'Статус проекта не определен' + return EDITING class Meta: model = Project diff --git a/backend/backend/settings.py b/backend/backend/settings.py index 3ef2cc3..f0347f3 100644 --- a/backend/backend/settings.py +++ b/backend/backend/settings.py @@ -37,6 +37,7 @@ 'django.contrib.staticfiles', 'debug_toolbar', 'django_filters', + 'django_object_actions', 'djoser', 'rest_framework', 'rest_framework.authtoken', @@ -93,24 +94,24 @@ # Database # https://docs.djangoproject.com/en/4.2/ref/settings/#databases -# DATABASES = { -# 'default': { -# 'ENGINE': 'django.db.backends.sqlite3', -# 'NAME': BASE_DIR / 'db.sqlite3', -# } -# } - DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.postgresql', - 'NAME': os.getenv('POSTGRES_DB', 'volunteers'), - 'USER': os.getenv('POSTGRES_USER', 'volunteers_user'), - 'PASSWORD': os.getenv('POSTGRES_PASSWORD', ''), - 'HOST': os.getenv('DB_HOST', 'localhost'), - 'PORT': os.getenv('DB_PORT', 5432), + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', } } +# DATABASES = { +# 'default': { +# 'ENGINE': 'django.db.backends.postgresql', +# 'NAME': os.getenv('POSTGRES_DB', 'volunteers'), +# 'USER': os.getenv('POSTGRES_USER', 'volunteers_user'), +# 'PASSWORD': os.getenv('POSTGRES_PASSWORD', ''), +# 'HOST': os.getenv('DB_HOST', 'localhost'), +# 'PORT': os.getenv('DB_PORT', 5432), +# } +# } + # Password validation # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators diff --git a/backend/projects/admin.py b/backend/projects/admin.py index 1939aef..8bd96f5 100644 --- a/backend/projects/admin.py +++ b/backend/projects/admin.py @@ -1,4 +1,9 @@ from django.contrib.admin import ModelAdmin, TabularInline, register +from django_object_actions import ( + DjangoObjectActions, + action, + takes_instance_or_queryset, +) from projects.models import ( Category, @@ -80,23 +85,23 @@ class CategoryAdmin(ModelAdmin): @register(Project) -class ProjectAdmin(ModelAdmin): +class ProjectAdmin(DjangoObjectActions, ModelAdmin): list_display = ( 'name', 'description', 'picture', - 'start_datetime', - 'end_datetime', - 'start_date_application', - 'end_date_application', - 'event_purpose', + # 'start_datetime', + # 'end_datetime', + # 'start_date_application', + # 'end_date_application', + # 'event_purpose', 'organization', 'city', - 'get_categories_display', - 'photo_previous_event', - 'get_participants_display', + # 'get_categories_display', + # 'photo_previous_event', + # 'get_participants_display', 'status_approve', - 'get_skills_display', + # 'get_skills_display', ) search_fields = ( 'name', @@ -107,10 +112,10 @@ class ProjectAdmin(ModelAdmin): # 'categories', ) list_filter = ( - 'start_datetime', - 'organization', - 'city', - 'categories', + # 'start_datetime', + # 'organization', + # 'city', + # 'categories', 'status_approve', ) save_on_top = True @@ -132,6 +137,36 @@ def get_participants_display(self, obj): [volunteer.user.last_name for volunteer in obj.participants.all()] ) + @action(label='Одобрить', description='Отправить проект на публикацию',) + def approve_project(self, request, obj): + obj.status_approve = Project.APPROVED + obj.save() + + @action(label='Отклонить', description='Отправить проект на доработку',) + def reject_project(self, request, obj): + obj.status_approve = Project.REJECTED + obj.save() + + change_actions = ('approve_project', 'reject_project',) + + @action( + description='Отправить проект на публикацию', + label='Одобрить', + ) + @takes_instance_or_queryset + def approve_projects(self, request, queryset): + queryset.update(status_approve=Project.APPROVED) + + @action( + description='Отправить проект на доработку', + label='Отклонить', + ) + @takes_instance_or_queryset + def reject_projects(self, request, queryset): + queryset.update(status_approve=Project.REJECTED) + + actions = ('approve_projects', 'reject_projects',) + @register(ProjectParticipants) class ProjectParticipantsAdmin(ModelAdmin): diff --git a/backend/projects/migrations/0002_project_admin_comments_alter_project_name_and_more.py b/backend/projects/migrations/0002_project_admin_comments_alter_project_name_and_more.py new file mode 100644 index 0000000..4a1bec1 --- /dev/null +++ b/backend/projects/migrations/0002_project_admin_comments_alter_project_name_and_more.py @@ -0,0 +1,56 @@ +# Generated by Django 4.2.6 on 2023-11-18 00:26 + +import datetime +import django.core.validators +from django.db import migrations, models +import projects.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='admin_comments', + field=models.TextField( + blank=True, + validators=[ + projects.validators.regex_string_validator, + projects.validators.LengthValidator( + max_length=750, min_length=2 + ), + ], + verbose_name='Комментарии администратора', + ), + ), + migrations.AlterField( + model_name='project', + name='name', + field=models.CharField( + max_length=150, + unique=True, + validators=[projects.validators.validate_name], + verbose_name='Название', + ), + ), + migrations.AlterField( + model_name='volunteer', + name='date_of_birth', + field=models.DateField( + help_text='Введите дату в формате "ГГГГ-ММ-ДД", пример: "2000-01-01".', + validators=[ + django.core.validators.MinValueValidator( + limit_value=datetime.date(1900, 1, 1) + ), + django.core.validators.MaxValueValidator( + limit_value=datetime.date(2023, 11, 18) + ), + ], + verbose_name='Дата рождения', + ), + ), + ] diff --git a/backend/projects/models.py b/backend/projects/models.py index 9a4aa78..5bffeda 100644 --- a/backend/projects/models.py +++ b/backend/projects/models.py @@ -369,6 +369,17 @@ class Project(models.Model): # blank=True, # добавила verbose_name='Навыки', ) + admin_comments = models.TextField( + blank=True, + validators=[ + regex_string_validator, + LengthValidator( + min_length=settings.MIN_LEN_TEXT_FIELD_V1, + max_length=settings.MAX_LEN_TEXT_FIELD, + ), + ], + verbose_name='Комментарии администратора', + ) class Meta: ordering = ('start_datetime',) diff --git a/backend/requirements.txt b/backend/requirements.txt index 894df98..44ec28e 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -12,6 +12,7 @@ django-cors-headers==4.3.0 django-debug-toolbar==4.2.0 django-filter==23.3 django-gmailapi-backend==0.3.2 +django-object-actions==4.2.0 django-rest-swagger==2.2.0 django-taggit==4.0.0 django-taggit-serializer==0.1.7 From b63c9e129f0941c5459ea89fc04969eabda72c8c Mon Sep 17 00:00:00 2001 From: Yuri Pomazkin <1yunker@gmail.com> Date: Sat, 18 Nov 2023 10:26:42 +0500 Subject: [PATCH 2/3] Update django admin actions in projects --- backend/backend/settings.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/backend/backend/settings.py b/backend/backend/settings.py index f0347f3..a65bb50 100644 --- a/backend/backend/settings.py +++ b/backend/backend/settings.py @@ -94,24 +94,24 @@ # Database # https://docs.djangoproject.com/en/4.2/ref/settings/#databases -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', - } -} - # DATABASES = { # 'default': { -# 'ENGINE': 'django.db.backends.postgresql', -# 'NAME': os.getenv('POSTGRES_DB', 'volunteers'), -# 'USER': os.getenv('POSTGRES_USER', 'volunteers_user'), -# 'PASSWORD': os.getenv('POSTGRES_PASSWORD', ''), -# 'HOST': os.getenv('DB_HOST', 'localhost'), -# 'PORT': os.getenv('DB_PORT', 5432), +# 'ENGINE': 'django.db.backends.sqlite3', +# 'NAME': BASE_DIR / 'db.sqlite3', # } # } +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': os.getenv('POSTGRES_DB', 'volunteers'), + 'USER': os.getenv('POSTGRES_USER', 'volunteers_user'), + 'PASSWORD': os.getenv('POSTGRES_PASSWORD', ''), + 'HOST': os.getenv('DB_HOST', 'localhost'), + 'PORT': os.getenv('DB_PORT', 5432), + } +} + # Password validation # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators From fd007821d12288c4e0f6973dea552c07cb6dd6b0 Mon Sep 17 00:00:00 2001 From: Yuri Pomazkin <1yunker@gmail.com> Date: Sat, 18 Nov 2023 13:32:47 +0500 Subject: [PATCH 3/3] Update django admin actions in projects --- backend/data/projects.csv | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/backend/data/projects.csv b/backend/data/projects.csv index 94380b5..aca5965 100644 --- a/backend/data/projects.csv +++ b/backend/data/projects.csv @@ -1,11 +1,11 @@ name,description,picture,start_datetime,end_datetime,start_date_application,end_date_application,event_purpose,event_address_id,project_tasks,project_events,organizer_provides,organization_id,city_id,photo_previous_event,status_approve -Зеленый город,"Проект направлен на создание и поддержание зеленых зон в городе. В рамках проекта волонтеры будут заниматься высадкой деревьев и кустарников, уходом за ними, а также уборкой мусора и благоустройством территории ",,2024-04-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-30 10:00,Создание зеленых зон в городе,1,Задачи проекта,Мероприятия следующие,саженцы,1,605,,На рассмотрении -Чистый город ,"Волонтеры будут проводить акции по уборке мусора на городских улицах, парках и пляжах.",,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-30 10:00,Создание чистоты и приятной атмосферы в городе,4,Задачи проекта,Мероприятия следующие,метлы и грабли,9,169,,На рассмотрении -Спортивные площадки для всех ,Создание и обустройство спортивных площадок для занятий различными видами спорта ,,2024-04-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 01:00,Создание спортивных уголков во дворах города,3,Задачи проекта,Мероприятия следующие,турники,4,605,,На рассмотрении -Безопасный город ,Обучение волонтеров правилам безопасности дорожного движения и проведение акций по привлечению внимания к проблемам безопасности на дорогах ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 01:00,Повысить уровень безопасности на дорогах,2,Задачи проекта,Мероприятия следующие,информационные листовки,21,605,,На рассмотрении -Культурный обмен ,"Организация культурных мероприятий (выставки, лекции, мастер-классы) для жителей города ",,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 01:00,"Популяризация искусства и культуры среди жителей города, формирование эстетического вкуса и чувства прекрасного",3,Задачи проекта,Мероприятия следующие,уроки музыки,20,276,,На рассмотрении -Городские истории ,Сбор и оформление информации о истории и достопримечательностях города. Создание экскурсионных маршрутов. ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,"Приобщение жителей города к культурной жизни, расширение их кругозора.",5,Задачи проекта,Мероприятия следующие,экскурсии,21,605,,На рассмотрении -Детская площадка ,Строительство и обустройство детской площадки. ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,Создание комфортного и безопасного пространства для игр и развития детей,5,Задачи проекта,Мероприятия следующие,игры,11,80,,На рассмотрении -Велодорожки ,Разработка и реализация проекта по созданию сети велодорожек в городе ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,Повышение привлекательности велосипедного транспорта для горожан и улучшение экологической ситуации,6,Задачи проекта,Мероприятия следующие,организатор предоставляет,7,827,,На рассмотрении -Уличное искусство ,Участие волонтеров в оформлении городского пространства с использованием искусства стрит-арта ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,"Создание гармоничного и яркого облика города, приобщение жителей к творчеству и улучшение культуры улиц",5,Задачи проекта,Мероприятия следующие,предоставляет организатор следующее,10,169,,На рассмотрении -Эко-фестиваль ,"Проведение фестиваля, посвященного вопросам экологии и устойчивого развития города ",,2024-04-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,"Привлечение внимания общественности к актуальным экологическим проблемам, формирование экологической культуры горожан",2,Задачи проекта,Мероприятия следующие,саженцы,12,80,,На рассмотрении \ No newline at end of file +Зеленый город,"Проект направлен на создание и поддержание зеленых зон в городе. В рамках проекта волонтеры будут заниматься высадкой деревьев и кустарников, уходом за ними, а также уборкой мусора и благоустройством территории ",,2024-04-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-30 10:00,Создание зеленых зон в городе,1,Задачи проекта,Мероприятия следующие,саженцы,1,605,,pending +Чистый город ,"Волонтеры будут проводить акции по уборке мусора на городских улицах, парках и пляжах.",,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-30 10:00,Создание чистоты и приятной атмосферы в городе,4,Задачи проекта,Мероприятия следующие,метлы и грабли,9,169,,pending +Спортивные площадки для всех ,Создание и обустройство спортивных площадок для занятий различными видами спорта ,,2024-04-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 01:00,Создание спортивных уголков во дворах города,3,Задачи проекта,Мероприятия следующие,турники,4,605,,pending +Безопасный город ,Обучение волонтеров правилам безопасности дорожного движения и проведение акций по привлечению внимания к проблемам безопасности на дорогах ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 01:00,Повысить уровень безопасности на дорогах,2,Задачи проекта,Мероприятия следующие,информационные листовки,21,605,,pending +Культурный обмен ,"Организация культурных мероприятий (выставки, лекции, мастер-классы) для жителей города ",,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 01:00,"Популяризация искусства и культуры среди жителей города, формирование эстетического вкуса и чувства прекрасного",3,Задачи проекта,Мероприятия следующие,уроки музыки,20,276,,pending +Городские истории ,Сбор и оформление информации о истории и достопримечательностях города. Создание экскурсионных маршрутов. ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,"Приобщение жителей города к культурной жизни, расширение их кругозора.",5,Задачи проекта,Мероприятия следующие,экскурсии,21,605,,pending +Детская площадка ,Строительство и обустройство детской площадки. ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,Создание комфортного и безопасного пространства для игр и развития детей,5,Задачи проекта,Мероприятия следующие,игры,11,80,,pending +Велодорожки ,Разработка и реализация проекта по созданию сети велодорожек в городе ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,Повышение привлекательности велосипедного транспорта для горожан и улучшение экологической ситуации,6,Задачи проекта,Мероприятия следующие,организатор предоставляет,7,827,,pending +Уличное искусство ,Участие волонтеров в оформлении городского пространства с использованием искусства стрит-арта ,,2023-10-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,"Создание гармоничного и яркого облика города, приобщение жителей к творчеству и улучшение культуры улиц",5,Задачи проекта,Мероприятия следующие,предоставляет организатор следующее,10,169,,pending +Эко-фестиваль ,"Проведение фестиваля, посвященного вопросам экологии и устойчивого развития города ",,2024-04-01 01:00:00,2024-10-01 01:00:00,2023-10-30 01:00,2023-10-31 05:00,"Привлечение внимания общественности к актуальным экологическим проблемам, формирование экологической культуры горожан",2,Задачи проекта,Мероприятия следующие,саженцы,12,80,,pending \ No newline at end of file