From 36a5391a0a30a37f0b78dcc0f300e76e83ecf5ee Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Mon, 1 Jul 2024 00:21:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BF=85=E9=A1=BB=E6=98=AF=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E4=B9=8B=E5=90=8E=E5=AF=B9=E9=A2=98=E7=9B=AE?= =?UTF-8?q?=E8=AF=84=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._solved_alter_comment_language_and_more.py | 30 +++++++++++++ comment/models.py | 6 +-- comment/views/oj.py | 44 +++++++++---------- 3 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 comment/migrations/0003_remove_comment_problem_solved_alter_comment_language_and_more.py diff --git a/comment/migrations/0003_remove_comment_problem_solved_alter_comment_language_and_more.py b/comment/migrations/0003_remove_comment_problem_solved_alter_comment_language_and_more.py new file mode 100644 index 0000000..67b88f2 --- /dev/null +++ b/comment/migrations/0003_remove_comment_problem_solved_alter_comment_language_and_more.py @@ -0,0 +1,30 @@ +# Generated by Django 5.0.6 on 2024-06-30 16:20 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('comment', '0002_alter_comment_options'), + ('submission', '0013_alter_submission_info_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='comment', + name='problem_solved', + ), + migrations.AlterField( + model_name='comment', + name='language', + field=models.CharField(choices=[('Python', 'Python'), ('C', 'C'), ('C++', 'C++'), ('Java', 'Java')], default='Python', max_length=10, verbose_name='解决这道题使用的语言'), + ), + migrations.AlterField( + model_name='comment', + name='submission', + field=models.ForeignKey(default='', on_delete=django.db.models.deletion.CASCADE, to='submission.submission'), + preserve_default=False, + ), + ] diff --git a/comment/models.py b/comment/models.py index 01416e4..a8680db 100644 --- a/comment/models.py +++ b/comment/models.py @@ -15,13 +15,11 @@ class Languages(models.TextChoices): class Comment(models.Model): problem = models.ForeignKey(Problem, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) - submission = models.ForeignKey(Submission, null=True, blank=True, on_delete=models.SET_NULL) - problem_solved = models.BooleanField() + submission = models.ForeignKey(Submission, on_delete=models.CASCADE) language = models.CharField( max_length=10, + default=Languages.Python, choices=Languages.choices, - null=True, - blank=True, verbose_name="解决这道题使用的语言", ) description_rating = models.PositiveSmallIntegerField( diff --git a/comment/views/oj.py b/comment/views/oj.py index 12a6bbc..3c9a2f1 100644 --- a/comment/views/oj.py +++ b/comment/views/oj.py @@ -19,31 +19,27 @@ class CommentAPI(APIView): except Problem.DoesNotExist: self.error("problem is not exists") - language = None - submission = None - problem_solved = False - - submission = ( - Submission.objects.select_related("problem") - .filter( - user_id=request.user.id, - problem_id=data["problem_id"], - result=JudgeStatus.ACCEPTED, + try: + submission = ( + Submission.objects.select_related("problem") + .filter( + user_id=request.user.id, + problem_id=data["problem_id"], + result=JudgeStatus.ACCEPTED, + ) + .first() ) - .first() - ) + except Submission.DoesNotExist: + self.error("submission is not exists or not accepted") - if submission: - problem_solved = True - language = submission.language - if language == "Python3": - language = "Python" + language = submission.language + if language == "Python3": + language = "Python" Comment.objects.create( user=request.user, problem=problem, submission=submission, - problem_solved=problem_solved, language=language, description_rating=data["description_rating"], difficulty_rating=data["difficulty_rating"], @@ -66,8 +62,10 @@ class CommentAPI(APIView): comprehensive=Round(Avg("comprehensive_rating"), 2), ) contents = comments.exclude(content="").values_list("content", flat=True) - return self.success({ - "count": count, - "rating": rating, - "contents": list(contents), - }) + return self.success( + { + "count": count, + "rating": rating, + "contents": list(contents), + } + )