projects: модуль проектов с шагами по отделам и Task.
Шаблоны/ручное создание, access_projects, сид «Открытие аптеки». Плюс SILO/S3 для Django media. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -105,6 +105,7 @@ INSTALLED_APPS = [
|
||||
'apps.reports',
|
||||
'apps.feed',
|
||||
'apps.tasks',
|
||||
'apps.projects',
|
||||
'apps.hiring',
|
||||
'apps.utilities',
|
||||
'apps.power_assets',
|
||||
@@ -189,6 +190,41 @@ STATICFILES_DIRS = [BASE_DIR / 'static']
|
||||
MEDIA_URL = '/media/'
|
||||
MEDIA_ROOT = BASE_DIR / 'media'
|
||||
|
||||
# SILO / S3-compatible object storage for Django media (photos, uploads).
|
||||
# Enabled only when endpoint + keys are set; otherwise local MEDIA_ROOT (dev).
|
||||
# Documents stay on Nextcloud WebDAV — see docs/silo.md.
|
||||
S3_ENDPOINT = env('S3_ENDPOINT', default='').rstrip('/')
|
||||
S3_ACCESS_KEY = env('S3_ACCESS_KEY', default='')
|
||||
S3_SECRET_KEY = env('S3_SECRET_KEY', default='')
|
||||
S3_MEDIA_BUCKET = env('S3_MEDIA_BUCKET', default='acore-media')
|
||||
S3_REGION = env('S3_REGION', default='us-east-1')
|
||||
S3_QUERYSTRING_EXPIRE = env.int('S3_QUERYSTRING_EXPIRE', default=3600)
|
||||
USE_S3_MEDIA = bool(S3_ENDPOINT and S3_ACCESS_KEY and S3_SECRET_KEY)
|
||||
|
||||
if USE_S3_MEDIA:
|
||||
STORAGES = {
|
||||
'default': {
|
||||
'BACKEND': 'storages.backends.s3.S3Storage',
|
||||
'OPTIONS': {
|
||||
'access_key': S3_ACCESS_KEY,
|
||||
'secret_key': S3_SECRET_KEY,
|
||||
'bucket_name': S3_MEDIA_BUCKET,
|
||||
'endpoint_url': S3_ENDPOINT,
|
||||
'region_name': S3_REGION,
|
||||
'addressing_style': 'path',
|
||||
'signature_version': 's3v4',
|
||||
'default_acl': None,
|
||||
'querystring_auth': True,
|
||||
'querystring_expire': S3_QUERYSTRING_EXPIRE,
|
||||
'file_overwrite': False,
|
||||
'object_parameters': {'CacheControl': 'max-age=86400'},
|
||||
},
|
||||
},
|
||||
'staticfiles': {
|
||||
'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage',
|
||||
},
|
||||
}
|
||||
|
||||
LOGIN_URL = '/accounts/login/'
|
||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||
|
||||
@@ -550,6 +586,16 @@ UNFOLD = {
|
||||
"icon": "task_alt",
|
||||
"link": reverse_lazy("admin:tasks_task_changelist"),
|
||||
},
|
||||
{
|
||||
"title": "Проекты",
|
||||
"icon": "account_tree",
|
||||
"link": reverse_lazy("admin:projects_project_changelist"),
|
||||
},
|
||||
{
|
||||
"title": "Шаблоны проектов",
|
||||
"icon": "schema",
|
||||
"link": reverse_lazy("admin:projects_projecttemplate_changelist"),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user