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), + } + )