Как отфильтровать данные по активному пользователю в Django?

Я пытаюсь извлечь только последние данные для активного пользователя в мой шаблон Django. Однако в настоящее время я получаю следующую ошибку.

Поле 'id' ожидало число, но получило объект <django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor at 0x7f0682901a90>.

Models.py:

class HealthStats(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date = models.DateField(auto_now=True)
    weight = models.DecimalField(max_digits=5, decimal_places=2)
    run_distance = models.IntegerField(default=5)
    run_time = models.TimeField()

    class Meta:
        db_table = 'health_stats'
        ordering = ['-date']

    def __str__(self):
        return f"{self.user} | {self.date}"

Views.py:

def health_hub(request):
    model = HealthStats
    
    def get_queryset(self):
        user = self.user
        latest = HealthStats.objects.filter(user=user).latest('date')
        return latest

    context = {
            "user": model.user,
            "weight": model.weight,
            "date": model.date,
            "run_distance": model.run_distance,
            "run_time": model.run_time,
            "stats": HealthStats,
            "latest": get_queryset(model)
        }
    return render(request, 'health_hub.html', context)

health_hub.html:

{% extends 'base.html' %}
{% load static %}


{% block content %}
<div class="container-fluid">
    <div class="row">
        <div class="col-sm-12 text-center">
            <h1>My Health Summary</h1>
        </div>
    </div>
</div>
<div class="container-fluid">
    <div class="row justify-content-center">
        <h3>Welcome {{ latest.user }}!</h3>
        <p>Please see below for your latest stats:</p>
        <table class="table table-bordered">
            <tr>
                <td>Weight: {{ latest.weight }}</td>
                <td>Run Distance: {{ latest.run_distance }} km</td>
            </tr>
            <tr>
                <td>Run Time: {{ latest.run_time }}</td>
                <td>Last Updated: {{ latest.date }}</td>
            </tr>
        </table>

Согласно сообщению об ошибке, похоже, что есть проблема с тем, что я пытаюсь протащить, но я не уверен, где именно, потому что я не запрашивал ID? Я просто пытаюсь отфильтровать данные в моих моделях, чтобы показать данные текущего пользователя, отсортированные по самому новому первому.

Любая помощь будет очень признательна!

Это ваш настоящий код? Вы смешиваете CBV и FBV, что странно... Ваша переменная model содержит класс, а не экземпляр. Я предполагал, что ваш контекст stats тоже плох, но я не нахожу, что вы хотите получить с помощью этой переменной

Попробуйте этот код для вашего представления:

def health_hub(request):
    latest = HealthStats.objects.filter(user=request.user).latest('date')

    context = {
            "user": latest.user,
            "weight": latest.weight,
            "date": latest.date,
            "run_distance": latest.run_distance,
            "run_time": latest.run_time,
            "stats": HealthStats,
            "latest": latest
        }
    return render(request, 'health_hub.html', context)

Небольшая помощь по CBV с Django: https://docs.djangoproject.com/fr/3.2/topics/class-based-views/generic-display/

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