Сохранение и обновление даты записи с помощью фреймворка 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.

Вернуться на верх