add problem answers

This commit is contained in:
2025-10-04 00:57:12 +08:00
parent 43f0b7818f
commit 60a100ab60
3 changed files with 36 additions and 7 deletions

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.2.3 on 2025-10-03 16:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('problem', '0002_problem_prompt'),
]
operations = [
migrations.AddField(
model_name='problem',
name='answers',
field=models.JSONField(null=True),
),
]

View File

@@ -1,6 +1,5 @@
from django.conf import settings
from django.db import models
from utils.models import JSONField
from account.models import User
from contest.models import Contest
@@ -51,13 +50,13 @@ class Problem(models.Model):
input_description = RichTextField()
output_description = RichTextField()
# [{input: "test", output: "123"}, {input: "test123", output: "456"}]
samples = JSONField()
samples = models.JSONField()
test_case_id = models.TextField()
# [{"input_name": "1.in", "output_name": "1.out", "score": 0}]
test_case_score = JSONField()
test_case_score = models.JSONField()
hint = RichTextField(null=True)
languages = JSONField()
template = JSONField()
languages = models.JSONField()
template = models.JSONField()
create_time = models.DateTimeField(auto_now_add=True)
# we can not use auto_now here
last_update_time = models.DateTimeField(auto_now=True, null=True)
@@ -67,7 +66,7 @@ class Problem(models.Model):
# MB
memory_limit = models.IntegerField()
# io mode
io_mode = JSONField(default=_default_io_mode)
io_mode = models.JSONField(default=_default_io_mode)
# special judge related
spj = models.BooleanField(default=False)
spj_language = models.TextField(null=True)
@@ -80,12 +79,14 @@ class Problem(models.Model):
tags = models.ManyToManyField(ProblemTag)
source = models.TextField(null=True)
prompt = models.TextField(null=True)
# [{language: "python", code: "..."}]
answers = models.JSONField(null=True)
# for OI mode
total_score = models.IntegerField(default=0)
submission_number = models.BigIntegerField(default=0)
accepted_number = models.BigIntegerField(default=0)
# {JudgeStatus.ACCEPTED: 3, JudgeStatus.WRONG_ANSWER: 11}, the number means count
statistic_info = JSONField(default=dict)
statistic_info = models.JSONField(default=dict)
share_submission = models.BooleanField(default=False)
class Meta:

View File

@@ -25,6 +25,11 @@ class CreateSampleSerializer(serializers.Serializer):
output = serializers.CharField(trim_whitespace=False)
class CreateAnswerSerializer(serializers.Serializer):
language = serializers.CharField()
code = serializers.CharField()
class CreateTestCaseScoreSerializer(serializers.Serializer):
input_name = serializers.CharField(max_length=32)
output_name = serializers.CharField(max_length=32)
@@ -80,6 +85,11 @@ class CreateOrEditProblemSerializer(serializers.Serializer):
hint = serializers.CharField(allow_blank=True, allow_null=True)
source = serializers.CharField(max_length=256, allow_blank=True, allow_null=True)
prompt = serializers.CharField(allow_blank=True, allow_null=True)
answers = serializers.ListField(
child=CreateAnswerSerializer(),
allow_empty=True,
allow_null=True,
)
share_submission = serializers.BooleanField()