Skip to content

Commit 0fc6ef3

Browse files
committed
genuinely have no idea how duplicates emerged
1 parent f8ee130 commit 0fc6ef3

4 files changed

Lines changed: 195 additions & 152 deletions

File tree

server/game_dev/admin.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
from django.contrib import admin
2-
from .models import Art, ArtContributor, ArtShowcase, Member, Game, Event, GameContributor, GameShowcase, Committee, SocialMedia
2+
from .models import (
3+
Art,
4+
ArtContributor,
5+
ArtShowcase,
6+
Member,
7+
Game,
8+
Event,
9+
GameContributor,
10+
GameShowcase,
11+
Committee,
12+
SocialMedia,
13+
)
314

415

516
class SocialMediaInline(admin.TabularInline):
@@ -27,8 +38,19 @@ class GameShowcaseAdmin(admin.ModelAdmin):
2738

2839

2940
class GamesAdmin(admin.ModelAdmin):
30-
list_display = ("id", "name", "description", "completion", "active", "hostURL", "itchEmbedID", "itchGamePlayableID", "itchGameWidth",
31-
"itchGameHeight", "thumbnail")
41+
list_display = (
42+
"id",
43+
"name",
44+
"description",
45+
"completion",
46+
"active",
47+
"hostURL",
48+
"itchEmbedID",
49+
"itchGamePlayableID",
50+
"itchGameWidth",
51+
"itchGameHeight",
52+
"thumbnail",
53+
)
3254
search_fields = ["name", "description"]
3355
raw_id_fields = ["event"]
3456

@@ -54,4 +76,4 @@ class ArtAdmin(admin.ModelAdmin):
5476
admin.site.register(GameShowcase, GameShowcaseAdmin)
5577
admin.site.register(Art, ArtAdmin)
5678
admin.site.register(ArtShowcase)
57-
admin.site.register(Committee, CommitteeAdmin)
79+
admin.site.register(Committee, CommitteeAdmin)

server/game_dev/models.py

Lines changed: 47 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,16 @@ def __str__(self):
2828

2929
# GameContributor table: links Game, Member, and role (composite PK)
3030
class GameContributor(models.Model):
31-
game = models.ForeignKey('Game', on_delete=models.CASCADE, related_name='game_contributors')
32-
member = models.ForeignKey('Member', on_delete=models.CASCADE, related_name='member_games')
31+
game = models.ForeignKey(
32+
"Game", on_delete=models.CASCADE, related_name="game_contributors"
33+
)
34+
member = models.ForeignKey(
35+
"Member", on_delete=models.CASCADE, related_name="member_games"
36+
)
3337
role = models.CharField(max_length=100)
3438

3539
class Meta:
36-
unique_together = (('game', 'member'),)
40+
unique_together = (("game", "member"),)
3741

3842
def __str__(self):
3943
return f"{self.member.name} ({self.role}) for {self.game.name}"
@@ -60,13 +64,13 @@ class CompletionStatus(models.IntegerChoices):
6064
default=None,
6165
null=True,
6266
blank=True,
63-
help_text="If game is stored on itch.io, please enter the itchEmbedID, i.e., 1000200"
67+
help_text="If game is stored on itch.io, please enter the itchEmbedID, i.e., 1000200",
6468
)
6569
itchGamePlayableID = models.PositiveBigIntegerField(
6670
default=None,
6771
null=True,
6872
blank=True,
69-
help_text="If a game is playable and has a web demo stored on itch.io, please enter the embed developer ID"
73+
help_text="If a game is playable and has a web demo stored on itch.io, please enter the embed developer ID",
7074
)
7175
itchGameWidth = models.PositiveBigIntegerField(
7276
default=None,
@@ -89,13 +93,23 @@ def clean(self):
8993
super().clean()
9094
if self.itchGamePlayableID:
9195
if not self.itchGameWidth:
92-
raise ValidationError({"itchGameWidth": "Game width is required if itchGamePlayableID is set."})
96+
raise ValidationError(
97+
{
98+
"itchGameWidth": "Game width is required if itchGamePlayableID is set."
99+
}
100+
)
93101
if not self.itchGameHeight:
94-
raise ValidationError({"itchGameHeight": "Game height is required if itchGamePlayableID is set."})
102+
raise ValidationError(
103+
{
104+
"itchGameHeight": "Game height is required if itchGamePlayableID is set."
105+
}
106+
)
95107

96108

97109
class GameShowcase(models.Model):
98-
game = models.OneToOneField('Game', on_delete=models.CASCADE, related_name='game_showcases')
110+
game = models.OneToOneField(
111+
"Game", on_delete=models.CASCADE, related_name="game_showcases"
112+
)
99113
description = models.TextField()
100114

101115
def __str__(self):
@@ -104,41 +118,50 @@ def __str__(self):
104118

105119
class Art(models.Model):
106120
name = models.CharField(null=False, max_length=200)
107-
description = models.CharField(max_length=200,)
108-
source_game = models.ForeignKey('Game', on_delete=models.CASCADE, related_name='game_artwork')
109-
media = models.ImageField(upload_to='art/', null=False)
121+
description = models.CharField(
122+
max_length=200,
123+
)
124+
source_game = models.ForeignKey(
125+
"Game", on_delete=models.CASCADE, related_name="game_artwork"
126+
)
127+
media = models.ImageField(upload_to="art/", null=False)
110128
active = models.BooleanField(default=True)
111129

112130
def __str__(self):
113131
return str(self.name)
114132

115133

116134
class ArtContributor(models.Model):
117-
art = models.ForeignKey('Art', on_delete=models.CASCADE, related_name='contributors')
118-
member = models.ForeignKey('Member', on_delete=models.CASCADE, related_name='art_contributions')
135+
art = models.ForeignKey(
136+
"Art", on_delete=models.CASCADE, related_name="contributors"
137+
)
138+
member = models.ForeignKey(
139+
"Member", on_delete=models.CASCADE, related_name="art_contributions"
140+
)
119141
role = models.CharField(max_length=100)
120142

121143
class Meta:
122144
constraints = [
123-
models.UniqueConstraint(fields=['art', 'member'], name='unique_art_member')
145+
models.UniqueConstraint(fields=["art", "member"], name="unique_art_member")
124146
]
125-
verbose_name = 'Art Contributor'
126-
verbose_name_plural = 'Art Contributors'
147+
verbose_name = "Art Contributor"
148+
verbose_name_plural = "Art Contributors"
127149

128150
def __str__(self):
129151
return f"{self.member.name} - {self.art.name} ({self.role})"
130152

131153

132154
class ArtShowcase(models.Model):
133155
description = models.CharField(max_length=200)
134-
art = models.ForeignKey(Art, on_delete=models.CASCADE, related_name='showcase')
156+
art = models.ForeignKey(Art, on_delete=models.CASCADE, related_name="showcase")
135157

136158
class Meta:
137159
constraints = [
138160
models.UniqueConstraint(
139-
fields=['art'],
140-
name='unique_artshowcase_per_art',
141-
violation_error_message='Each art piece can only have one showcase.')
161+
fields=["art"],
162+
name="unique_artshowcase_per_art",
163+
violation_error_message="Each art piece can only have one showcase.",
164+
)
142165
]
143166

144167
def __str__(self):
@@ -147,7 +170,9 @@ def __str__(self):
147170

148171
class SocialMedia(models.Model):
149172
link = models.URLField(max_length=2083)
150-
member = models.ForeignKey('Member', on_delete=models.CASCADE, related_name='social_media_links')
173+
member = models.ForeignKey(
174+
"Member", on_delete=models.CASCADE, related_name="social_media_links"
175+
)
151176
socialMediaUserName = models.CharField(max_length=200, blank=True)
152177

153178
def __str__(self):
@@ -164,7 +189,7 @@ class Committee(models.Model):
164189
"MARK": "Marketing",
165190
"EV": "Events OCM",
166191
"PRO": "Projects OCM",
167-
"FRE": "Fresher Rep"
192+
"FRE": "Fresher Rep",
168193
}
169194
role = models.CharField(max_length=9, choices=roles, default="FRE", unique=True)
170195

@@ -173,49 +198,3 @@ def get_member(self):
173198

174199
def __str__(self):
175200
return self.id.name
176-
177-
178-
# Copied from issue-8-merge-40 therefore is just sample to work with
179-
class Art(models.Model):
180-
name = models.CharField(null=False, max_length=200)
181-
description = models.CharField(max_length=200,)
182-
183-
# Talk to the artwork team to change their model to meet the follow, remove the null and blank
184-
source_game = models.ForeignKey('Game', on_delete=models.CASCADE, related_name='game_artwork')
185-
media = models.ImageField(upload_to='art/', null=False)
186-
active = models.BooleanField(default=True)
187-
188-
def __str__(self):
189-
return str(self.name)
190-
191-
192-
class ArtContributor(models.Model):
193-
art = models.ForeignKey('Art', on_delete=models.CASCADE, related_name='contributors')
194-
member = models.ForeignKey('Member', on_delete=models.CASCADE, related_name='art_contributions')
195-
role = models.CharField(max_length=100)
196-
197-
class Meta:
198-
constraints = [
199-
models.UniqueConstraint(fields=['art', 'member'], name='unique_art_member')
200-
]
201-
verbose_name = 'Art Contributor'
202-
verbose_name_plural = 'Art Contributors'
203-
204-
def __str__(self):
205-
return f"{self.member.name} - {self.art.name} ({self.role})"
206-
207-
208-
class ArtShowcase(models.Model):
209-
description = models.CharField(max_length=200)
210-
art = models.ForeignKey(Art, on_delete=models.CASCADE, related_name='showcase')
211-
212-
class Meta:
213-
constraints = [
214-
models.UniqueConstraint(
215-
fields=['art'],
216-
name='unique_artshowcase_per_art',
217-
violation_error_message='Each art piece can only have one showcase.')
218-
]
219-
220-
def __str__(self):
221-
return f"ArtShowcase[Art={str(self.art.name)}, Description={self.description}]"

0 commit comments

Comments
 (0)