admin修改username后update submissions;

problem id refresh api
This commit is contained in:
zema1
2017-11-08 21:56:39 +08:00
parent 2d00ed802d
commit 343eff1c51
4 changed files with 28 additions and 3 deletions

View File

@@ -1,5 +1,6 @@
from django.db.models import Q
from submission.models import Submission
from utils.api import APIView, validate_serializer
from utils.shortcuts import rand_str
@@ -25,6 +26,7 @@ class UserAdminAPI(APIView):
if User.objects.filter(email=data["email"].lower()).exclude(id=user.id).exists():
return self.error("Email already exists")
pre_username = user.username
user.username = data["username"]
user.email = data["email"]
user.admin_type = data["admin_type"]
@@ -58,6 +60,8 @@ class UserAdminAPI(APIView):
user.two_factor_auth = data["two_factor_auth"]
user.save()
if pre_username != user.username:
Submission.objects.filter(username=pre_username).update(username=user.username)
return self.success(UserSerializer(user).data)
@super_admin_required

View File

@@ -11,6 +11,7 @@ from django.utils.timezone import now
from django.views.decorators.csrf import ensure_csrf_cookie
from otpauth import OtpAuth
from problem.models import Problem
from utils.constants import ContestRuleType
from options.options import SysOptions
from utils.api import APIView, validate_serializer
@@ -379,3 +380,21 @@ class UserRankAPI(APIView):
else:
profiles = profiles.filter(total_score__gt=0).order_by("-total_score")
return self.success(self.paginate_data(request, profiles, RankInfoSerializer))
class ProfileProblemDisplayIDRefreshAPI(APIView):
@login_required
def get(self, request):
profile = request.user.userprofile
acm_problems = profile.acm_problems_status["problems"]
oi_problems = profile.oi_problems_status["problems"]
ids = list(acm_problems.keys()) + list(oi_problems.keys())
display_ids = Problem.objects.filter(id__in=ids).values_list("_id", flat=True)
id_map = dict(zip(ids, display_ids))
print(id_map)
for k, v in acm_problems.items():
v["_id"] = id_map[k]
for k, v in oi_problems.items():
v["_id"] = id_map[k]
profile.save(update_fields=["acm_problems_status", "oi_problems_status"])
return self.success()