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

View File

@@ -25,6 +25,11 @@ class CreateSampleSerializer(serializers.Serializer):
output = serializers.CharField(trim_whitespace=False) output = serializers.CharField(trim_whitespace=False)
class CreateAnswerSerializer(serializers.Serializer):
language = serializers.CharField()
code = serializers.CharField()
class CreateTestCaseScoreSerializer(serializers.Serializer): class CreateTestCaseScoreSerializer(serializers.Serializer):
input_name = serializers.CharField(max_length=32) input_name = serializers.CharField(max_length=32)
output_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) hint = serializers.CharField(allow_blank=True, allow_null=True)
source = serializers.CharField(max_length=256, 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) prompt = serializers.CharField(allow_blank=True, allow_null=True)
answers = serializers.ListField(
child=CreateAnswerSerializer(),
allow_empty=True,
allow_null=True,
)
share_submission = serializers.BooleanField() share_submission = serializers.BooleanField()