Skip to content

Commit cc8c4e2

Browse files
authored
Merge pull request #165 from pythonkr/feature/sponsor-admin
후원사 상세 페이지를 위한 API 구현
2 parents f07cc58 + 8901ecb commit cc8c4e2

File tree

5 files changed

+121
-8
lines changed

5 files changed

+121
-8
lines changed

sponsor/admin.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from django_summernote.admin import SummernoteModelAdmin
33
from import_export.admin import ImportExportModelAdmin
44

5-
from sponsor.models import Sponsor, SponsorLevel, Patron
5+
from sponsor.models import Sponsor, SponsorLevel, Patron, SponsorBenefit, BenefitByLevel
66

77

88
class SponsorAdmin(SummernoteModelAdmin):
@@ -21,7 +21,7 @@ class SponsorAdmin(SummernoteModelAdmin):
2121
"accepted",
2222
"paid_at",
2323
)
24-
list_filter = ("accepted",)
24+
list_filter = ("accepted", "submitted")
2525
ordering = ("-created_at",)
2626

2727

@@ -35,15 +35,41 @@ class SponsorLevelAdmin(SummernoteModelAdmin):
3535
"name",
3636
"price",
3737
"limit",
38+
"year",
3839
)
3940
list_editable = ("order",)
4041
ordering = ("order",)
41-
search_fields = ("name",)
42+
search_fields = ("name", "year")
4243

4344

4445
admin.site.register(SponsorLevel, SponsorLevelAdmin)
4546

4647

48+
class SponsorBenefitAdmin(SummernoteModelAdmin):
49+
list_display = (
50+
"id",
51+
"name",
52+
"desc",
53+
"unit",
54+
"year",
55+
"is_countable",
56+
)
57+
ordering = ("-year", "id")
58+
search_fields = ("name", "year")
59+
list_editable = ("unit", "is_countable")
60+
61+
62+
admin.site.register(SponsorBenefit, SponsorBenefitAdmin)
63+
64+
65+
class BenefitByLevelAdmin(SummernoteModelAdmin):
66+
list_display = ("id", "benefit", "level", "offer", "uncountable_offer")
67+
list_editable = ("offer",)
68+
69+
70+
admin.site.register(BenefitByLevel, BenefitByLevelAdmin)
71+
72+
4773
class PatronAdmin(SummernoteModelAdmin, ImportExportModelAdmin):
4874
list_display = (
4975
"id",
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Generated by Django 4.1.5 on 2024-09-18 03:49
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("sponsor", "0009_sponsorbenefit_year_sponsorlevel_benefits"),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name="benefitbylevel",
15+
options={
16+
"verbose_name": "후원사 등급별 혜택",
17+
"verbose_name_plural": "후원사 등급별 혜택 목록",
18+
},
19+
),
20+
migrations.AlterModelOptions(
21+
name="sponsorbenefit",
22+
options={
23+
"verbose_name": "후원사 혜택",
24+
"verbose_name_plural": "후원사 혜택 목록",
25+
},
26+
),
27+
migrations.AddField(
28+
model_name="benefitbylevel",
29+
name="uncountable_offer",
30+
field=models.TextField(blank=True, help_text="셀 수 없는 혜택", null=True),
31+
),
32+
migrations.AlterField(
33+
model_name="benefitbylevel",
34+
name="offer",
35+
field=models.PositiveIntegerField(
36+
help_text="제공 하는 혜택 개수", null=True
37+
),
38+
),
39+
migrations.AlterField(
40+
model_name="sponsorbenefit",
41+
name="unit",
42+
field=models.CharField(
43+
blank=True, help_text="혜택 단위", max_length=10, null=True
44+
),
45+
),
46+
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 4.1.5 on 2024-09-18 12:30
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("sponsor", "0010_alter_benefitbylevel_options_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name="benefitbylevel",
15+
name="offer",
16+
field=models.PositiveIntegerField(
17+
blank=True, help_text="제공 하는 혜택 개수", null=True
18+
),
19+
),
20+
]

sponsor/models.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,20 @@ def get_queryset(self):
1212

1313
class SponsorBenefit(models.Model):
1414
class Meta:
15-
verbose_name = "후원사 등급 별 혜택"
16-
verbose_name_plural = "후원사 등급 별 혜택 목록"
15+
verbose_name = "후원사 혜택"
16+
verbose_name_plural = "후원사 혜택 목록"
1717

1818
name = models.CharField(max_length=255, help_text="혜택 이름")
1919
desc = models.TextField(null=True, blank=True, help_text="기타")
20-
unit = models.CharField(max_length=10, help_text="혜택 단위")
20+
unit = models.CharField(max_length=10, null=True, blank=True, help_text="혜택 단위")
2121
year = models.IntegerField(default=2023)
2222
is_countable = models.BooleanField(
2323
default=True, help_text="제공 하는 혜택이 셀 수 있는지 여부"
2424
)
2525

26+
def __str__(self):
27+
return self.name
28+
2629

2730
class SponsorLevel(models.Model):
2831
class Meta:
@@ -75,6 +78,8 @@ def __str__(self):
7578

7679
class BenefitByLevel(models.Model):
7780
class Meta:
81+
verbose_name = "후원사 등급별 혜택"
82+
verbose_name_plural = "후원사 등급별 혜택 목록"
7883
constraints = [
7984
models.UniqueConstraint(
8085
fields=["benefit_id", "level_id"], name="IX_BENEFIT_BY_LEVEL_1"
@@ -87,7 +92,15 @@ class Meta:
8792
level = models.ForeignKey(
8893
SponsorLevel, on_delete=models.CASCADE, related_name="benefit_by_level"
8994
)
90-
offer = models.PositiveIntegerField(help_text="제공 하는 혜택 개수")
95+
offer = models.PositiveIntegerField(
96+
null=True, blank=True, help_text="제공 하는 혜택 개수"
97+
)
98+
uncountable_offer = models.TextField(
99+
null=True, blank=True, help_text="셀 수 없는 혜택"
100+
)
101+
102+
def __str__(self):
103+
return f"{self.level!s} - {self.benefit!s}"
91104

92105

93106
def registration_file_upload_to(instance, filename):

sponsor/serializers.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,15 @@ class SponsorBenefitWithOfferSerializer(SponsorBenefitSerializer):
4242

4343
class Meta:
4444
model = BenefitByLevel
45-
fields = ["id", "name", "desc", "unit", "is_countable", "offer"]
45+
fields = [
46+
"id",
47+
"name",
48+
"desc",
49+
"unit",
50+
"is_countable",
51+
"offer",
52+
"uncountable_offer",
53+
]
4654

4755
def get_benefit_id(self, obj):
4856
breakpoint()

0 commit comments

Comments
 (0)