Skip to content

Commit 44d782a

Browse files
authored
Release 1.0.0
Merge pull request #98 from HelloPy-Korea/develop
2 parents 3915269 + f329b15 commit 44d782a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1072
-24
lines changed

.github/ISSUE_TEMPLATE/bug.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
name: "Bug Report"
3+
about: "QA 를 통해 발견한 bug 를 신고하는 템플릿입니다."
4+
title: "[Bug]"
5+
labels: ["bug"]
6+
---
7+
8+
## 버그 재현
9+
1. 어떤 페이지(url)에서:
10+
2. 어떤 동작(버튼 클릭, 스크롤 등)을 했는지:
11+
12+
## 기대 결과 vs 실제 결과
13+
<!-- 정상적으로 동작한다면 어떻게 보여야/동작해야 하는지 -->
14+
<!-- 현재 버그 상황에서 실제로 나타나는 현상을 써주세요. -->
15+
16+
## 참고자료 (필요 시)
17+
- **스크린셧**: (에러 메시지, 문제 화면 등을 캡처하여 첨부)

makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@ setup-dev: setup
99
uv run pre-commit install
1010

1111
migration:
12+
uv run src/manage.py makemigrations
1213
uv run src/manage.py migrate
1314

1415
run:
1516
uv run src/manage.py runserver $(HOST):$(PORT)
1617

18+
run-dev:
19+
DEBUG=True ALLOWED_HOSTS=* uv run src/manage.py runserver $(HOST):$(PORT)
20+
1721
unit-test:
1822
uv run src/manage.py test --tag=unit
1923

src/activity_gallery/__init__.py

Whitespace-only changes.

src/activity_gallery/admin.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from django.contrib import admin
2+
from django.utils.html import format_html
3+
4+
from .models import ActionPhoto, ActivityAction, ActivityTag, Tag
5+
6+
7+
class ActivityTagInline(admin.TabularInline):
8+
"""ActivityAction에 연결된 태그를 추가하는 인라인"""
9+
10+
model = ActivityTag
11+
extra = 1
12+
autocomplete_fields = ["tag"] # 태그 자동 완성 기능 추가
13+
14+
15+
class ActionPhotoInline(admin.TabularInline):
16+
"""ActivityAction에 연결된 사진을 추가하는 인라인"""
17+
18+
model = ActionPhoto
19+
extra = 1
20+
fields = ("image", "image_preview")
21+
readonly_fields = ("image_preview",)
22+
23+
def image_preview(self, obj):
24+
"""업로드된 이미지를 미리보기로 표시"""
25+
if obj.image:
26+
return format_html(
27+
'<img src="{}" width="100" height="100" style="object-fit: cover;"/>', obj.image.url
28+
)
29+
return "-"
30+
31+
32+
@admin.register(ActivityAction)
33+
class ActivityActionAdmin(admin.ModelAdmin):
34+
"""커뮤니티 활동 관리자 페이지"""
35+
36+
list_display = ("id", "title", "content_preview")
37+
search_fields = ("title", "content")
38+
inlines = [ActivityTagInline, ActionPhotoInline] # 태그 & 사진 추가 가능
39+
40+
def content_preview(self, obj):
41+
"""내용이 길 경우 일부만 미리보기"""
42+
return obj.content[:50] + "..." if len(obj.content) > 50 else obj.content
43+
44+
content_preview.short_description = "내용 미리보기"
45+
46+
47+
@admin.register(Tag)
48+
class TagAdmin(admin.ModelAdmin):
49+
"""태그 관리자 페이지"""
50+
51+
list_display = ("id", "name")
52+
search_fields = ("name",)

src/activity_gallery/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class ActivityActionConfig(AppConfig):
5+
default_auto_field = "django.db.models.BigAutoField"
6+
name = "activity_gallery"
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Generated by Django 5.1.5 on 2025-03-01 08:01
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
initial = True
9+
10+
dependencies = [
11+
("public", "0001_initial"),
12+
]
13+
14+
operations = [
15+
migrations.CreateModel(
16+
name="ActivityAction",
17+
fields=[
18+
(
19+
"id",
20+
models.BigAutoField(
21+
auto_created=True,
22+
primary_key=True,
23+
serialize=False,
24+
verbose_name="ID",
25+
),
26+
),
27+
("title", models.CharField(max_length=20, verbose_name="활동명")),
28+
("content", models.TextField(verbose_name="내용")),
29+
],
30+
),
31+
migrations.CreateModel(
32+
name="ActionPhoto",
33+
fields=[
34+
(
35+
"id",
36+
models.BigAutoField(
37+
auto_created=True,
38+
primary_key=True,
39+
serialize=False,
40+
verbose_name="ID",
41+
),
42+
),
43+
("image", models.ImageField(upload_to="activity_photos/")),
44+
(
45+
"activity_action",
46+
models.ForeignKey(
47+
blank=True,
48+
null=True,
49+
on_delete=django.db.models.deletion.CASCADE,
50+
related_name="photos",
51+
to="activity_gallery.activityaction",
52+
),
53+
),
54+
],
55+
),
56+
migrations.CreateModel(
57+
name="ActivityTag",
58+
fields=[
59+
(
60+
"id",
61+
models.BigAutoField(
62+
auto_created=True,
63+
primary_key=True,
64+
serialize=False,
65+
verbose_name="ID",
66+
),
67+
),
68+
(
69+
"activity_action",
70+
models.ForeignKey(
71+
on_delete=django.db.models.deletion.CASCADE,
72+
related_name="activity_tags",
73+
to="activity_gallery.activityaction",
74+
),
75+
),
76+
(
77+
"tag",
78+
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="public.tag"),
79+
),
80+
],
81+
options={
82+
"unique_together": {("activity_action", "tag")},
83+
},
84+
),
85+
migrations.AddField(
86+
model_name="activityaction",
87+
name="tags",
88+
field=models.ManyToManyField(
89+
related_name="actions",
90+
through="activity_gallery.ActivityTag",
91+
to="public.tag",
92+
),
93+
),
94+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 5.1.5 on 2025-03-01 08:11
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
("activity_gallery", "0001_initial"),
9+
]
10+
11+
operations = [
12+
migrations.AlterModelOptions(
13+
name="activityaction",
14+
options={
15+
"verbose_name": "활동 갤러리",
16+
"verbose_name_plural": "활동 갤러리",
17+
},
18+
),
19+
]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Generated by Django 5.1.5 on 2025-03-05 05:26
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
("activity_gallery", "0002_alter_activityaction_options"),
9+
]
10+
11+
operations = [
12+
migrations.AddField(
13+
model_name="activityaction",
14+
name="thumbnail",
15+
field=models.ImageField(
16+
blank=True,
17+
null=True,
18+
upload_to="imgages/",
19+
verbose_name="썸네일 이미지",
20+
),
21+
),
22+
]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 5.1.5 on 2025-03-05 11:32
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
("activity_gallery", "0003_activityaction_thumbnail"),
9+
]
10+
11+
operations = [
12+
migrations.AlterField(
13+
model_name="activityaction",
14+
name="thumbnail",
15+
field=models.ImageField(upload_to="imgages/", verbose_name="썸네일 이미지"),
16+
),
17+
]

src/activity_gallery/migrations/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)