Django возвращает дубликаты, даже если используется функция distinct()

Я использую django=4.1, python=3.8 & sqlite. Я хочу отфильтровать пять лучших очков игроков и уникальных игроков за определенный месяц и представить их в шаблоне, дубликатов быть не должно. Это модель PlayerPoint:

class PlayerPoint(models.Model):
    OPERATION_CHOICES = (('ADD', 'ADD'), ('SUB', 'SUBTRACT'), ('RMN', 'REMAIN'))

    points = models.IntegerField(null=False, default=0)
    operation = models.CharField(
        max_length=3,
        null=False,
        choices=OPERATION_CHOICES,
        default=OPERATION_CHOICES[2][0]
    )
    operation_amount = models.IntegerField(null=False)
    operation_reason = models.CharField(null=False, max_length=1500)
    player = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        null=False,
        on_delete=models.PROTECT,
        to_field="phone_number",
        related_name="player_points"
    )
    points_ts = models.DateTimeField(auto_now_add=True, null=False)

А это модель игрока:


class Player(AbstractUser):
    phone_number = models.CharField(
        max_length=14,
        unique=True,
        help_text="Please ensure +251 is included"
    )
    first_name = models.CharField(
        max_length=40,
        help_text="please ensure that you've spelt it correctly"
    )
    father_name = models.CharField(
        max_length=40,
        help_text="please ensure that you've spelt it correctly"
    )
    grandfather_name = models.CharField(
        max_length=40,
        help_text="please ensure that you've spelt it correctly"
    )
    email = models.EmailField(
        unique=True,
        help_text="please ensure that the email is correct"
    )
    age = models.CharField(max_length=3)
    profile_pic = models.ImageField(upload_to='profile_pix', default='profile_pix/placeholder.jpg')
    joined_ts = models.DateTimeField(auto_now_add=True, null=False)
    username = None

Когда я выполняю приведенный ниже запрос, он выдает мне 5 лучших очков игроков, но они не различаются, идентификаторы игроков дублируются. Он продолжает повторять одного и того же игрока.

q = PlayerPoint.objects.filter(points_ts__year=2023, points_ts__month=1, points__gte=2000)
x = q.order_by('-points')
y = x.values_list('player_id', flat=True).distinct()
print(y)

Вывод: <QuerySet [('+251703445566',), ('+251703445566',), ('+251703445566',), ('+251703445566',), ('+251703445566',), ('+251703445566',)]>

Как видите, это одни и те же номера телефонов, означающие одного и того же игрока.

Как это исправить?

Заранее благодарю за прочтение и помощь.

Используйте запрос DISTINCT

PlayerPoint.objects.filter(...).values_list("player_id", flat=true).order_by("player_id").distinct()
Вернуться на верх