Skip to content

Commit 8763a54

Browse files
authored
added categories to dashboard (#45)
1 parent 6385a18 commit 8763a54

File tree

6 files changed

+66
-17
lines changed

6 files changed

+66
-17
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ db.sqlite3
33
backups
44
.ds_store
55
core/staticfiles
6+
venv

codechallenges/admin.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.contrib import admin
22

33
# Register your models here.
4-
from .models import Question, Submission, CodeChallengeEvent
4+
from .models import Question, Submission, CodeChallengeEvent, Category
55

66

77
@admin.register(Question)
@@ -24,3 +24,8 @@ class CustomerSubmission(admin.ModelAdmin):
2424
@admin.register(CodeChallengeEvent)
2525
class CustomerCodeChallengeEvent(admin.ModelAdmin):
2626
list_display = ("title", "description")
27+
28+
29+
@admin.register(Category)
30+
class CustomerCategory(admin.ModelAdmin):
31+
list_display = ("title", "body")
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Generated by Django 3.1.4 on 2021-05-22 19:42
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("codechallenges", "0007_category"),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name="category",
15+
name="questions",
16+
),
17+
migrations.AddField(
18+
model_name="question",
19+
name="categories",
20+
field=models.ManyToManyField(to="codechallenges.Category"),
21+
),
22+
]

codechallenges/models.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@ def __str__(self):
99
return self.title
1010

1111

12+
class Category(models.Model):
13+
title = models.CharField(max_length=150)
14+
body = models.TextField()
15+
16+
# questions = models.ManyToManyField(Question) # Django auto-validates duplicates
17+
18+
def __str__(self):
19+
return self.title
20+
21+
1222
class Question(models.Model):
1323
title = models.CharField(max_length=150)
1424
body = models.TextField()
@@ -37,6 +47,8 @@ class Question(models.Model):
3747
CodeChallengeEvent, on_delete=models.CASCADE, blank=True, null=True
3848
)
3949

50+
categories = models.ManyToManyField(Category)
51+
4052
def __str__(self):
4153
return self.title
4254

@@ -55,13 +67,3 @@ class Meta:
5567
"email",
5668
"question",
5769
)
58-
59-
60-
class Category(models.Model):
61-
title = models.CharField(max_length=150)
62-
body = models.TextField()
63-
64-
questions = models.ManyToManyField(Question) # Django auto-validates duplicates
65-
66-
def __str__(self):
67-
return self.title

codechallenges/serializers.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
from rest_framework import serializers
2-
from codechallenges.models import Question, Submission
2+
from codechallenges.models import Question, Submission, Category
3+
4+
5+
class CategorySerializer(serializers.ModelSerializer):
6+
class Meta:
7+
model = Category
8+
fields = ["title"]
39

410

511
class QuestionSerializer(serializers.ModelSerializer):
12+
categories = CategorySerializer(many=True, required=False)
13+
614
class Meta:
715
model = Question
816
fields = (
@@ -13,13 +21,24 @@ class Meta:
1321
"release_date",
1422
"expiration_date",
1523
"difficulty",
24+
"categories",
1625
)
1726

1827

1928
class QuestionHiddenSerializer(serializers.ModelSerializer):
29+
categories = CategorySerializer(many=True, required=False)
30+
2031
class Meta:
2132
model = Question
22-
fields = ("title", "body", "format")
33+
fields = (
34+
"title",
35+
"body",
36+
"format",
37+
"release_date",
38+
"expiration_date",
39+
"difficulty",
40+
"categories",
41+
)
2342

2443

2544
class SubmissionSerializer(serializers.ModelSerializer):

codechallenges/tests.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ def setUp(self) -> None:
3737
return super().setUp()
3838

3939
def test_categories(self):
40-
self.category1.questions.add(self.question1) # Added
41-
self.category1.questions.add(self.question2) # Added
42-
self.category1.questions.add(self.question1) # Not Added
43-
self.assertEquals(len(self.category1.questions.all()), 2)
40+
self.question1.categories.add(self.category1) # Added
41+
self.question1.categories.add(self.category2) # Added
42+
self.question2.categories.add(self.category1) # Not Added
43+
self.assertEquals(len(self.question1.categories.all()), 2)
4444

4545

4646
class SubmissionTestCase(TestCase):

0 commit comments

Comments
 (0)