Сохранение и обновление даты записи с помощью фреймворка Django Rest
Я новичок в django, я использую метод AIPView из restframework для создания и обновления модели таблицы лидеров. Требование состоит в сохранении Email, имени и общего количества очков вместе с полем даты, которое автоматически обновляет дату каждый раз, когда запись сохраняется.
Каждый раз, когда пользователь набирает свой наивысший балл, он заносится в базу данных на сервере. Пользователь может достигать наивысшего результата много раз в течение одного дня или в течение нескольких дней
Проблема в том, что мой клиент хочет сохранить запись о наивысшем результате по дате.
Я могу обновлять общее количество очков каждый раз, когда я получаю от клиента за текущую дату, но я не могу сохранить высокие показатели предыдущих дней/TotlaPoints, Пожалуйста, посоветуйте решение.
Это мой файл Models.py
class leaderboard(models.Model):
name = models.CharField(_("playername"), max_length=255)
email = models.CharField(_("email"), max_length=255, default='myemail@gmail.com')
TotalPoints = models.IntegerField(_("TotalPoints"))
updated_at = models.DateTimeField(auto_now=True)code here
Вот мой файл Views.py: Я попробовал следующий код, но он только сохраняет наивысший результат в поле Total_points и обновляет поле даты (updated_at), я хочу продолжать обновлять Total Points пока дата не изменится, когда наступает следующий день, должна быть сделана новая запись для той же записи, но с другой датой и Total Point. Короче говоря, я хочу сохранить наивысший балл каждого дня для каждого пользователя. Пожалуйста, помогите.
from .models import leaderboard as leaderb
import datetime
# Create your views here.
class UpdateLeaderboard(APIView):
permission_classes = (permissions.AllowAny,)
http_method_names = ['get','post']
def get(self, request, *args, **kwargs):
serializer = leaderboardSerializers(leaderb.objects.all()[:2], many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
def post(self, request, format = None):
serializer = leaderboardSerializers(data=request.data)
if serializer.is_valid():
name = serializer.validated_data['name']
email = serializer.validated_data['email']
TotalPoints = serializer.validated_data['TotalPoints']
today = datetime.date.today()
if leaderb.objects.filter(updated_at__date = today) and leaderb.objects.filter(email=email).exists():
serializer = leaderb.objects.get(email=email)
serializer.name = name
serializer.TotalPoints = TotalPoints
else :
serializer.email = email
serializer.name = name
serializer.TotalPoints = TotalPoints
serializer.save()
return Response(None, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class Leaderboard(APIView):
def get(self, request, formate=None, **kwargs):
today = datetime.date.today()
serializer = lwithcdateSerializers(leaderb.objects.filter(updated_at__date=today).order_by('-TotalPoints')[:40], many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
Это файл serializers.py
from rest_framework import serializers
from .models import leaderboard
class leaderboardSerializers(serializers.ModelSerializer):
class Meta:
model = leaderboard
fields = [
'name',
'email',
'TotalPoints',
]
class lwithcdateSerializers(serializers.ModelSerializer):
class Meta:
model = leaderboard
fields = [
'name',
'email',
'TotalPoints',
'updated_at',
]enter code here
Думаю, вам нужно сохранить Highest Points в отдельной таблице, связанной с Leaderboard.