Parcourir la source

Fix profile view and progress fields

Colin Powell il y a 2 ans
Parent
commit
cbc8bea1f3

+ 4 - 2
profiles/admin.py

@@ -2,9 +2,11 @@ from profiles.models import UserGameProgress, UserProfile
 from django.contrib import admin
 
 
+@admin.register(UserProfile)
 class UserProfileAdmin(admin.ModelAdmin):
     filter_horizontal = ("favorite_games",)
 
 
-admin.site.register(UserProfile, UserProfileAdmin)
-admin.site.register(UserGameProgress)
+@admin.register(UserGameProgress)
+class UserGameProgressAdmin(admin.ModelAdmin):
+    raw_id_fields = ["game"]

+ 24 - 0
profiles/migrations/0002_usergameprogress_finished_ts_and_more.py

@@ -0,0 +1,24 @@
+# Generated by Django 4.0.4 on 2022-06-20 16:36
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('profiles', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='usergameprogress',
+            name='finished_ts',
+            field=models.DateTimeField(blank=True, null=True),
+        ),
+        migrations.AddField(
+            model_name='usergameprogress',
+            name='started_ts',
+            field=models.DateTimeField(blank=True, default=django.utils.timezone.now),
+        ),
+    ]

+ 21 - 0
profiles/migrations/0003_alter_usergameprogress_user.py

@@ -0,0 +1,21 @@
+# Generated by Django 4.0.4 on 2022-06-20 16:41
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('profiles', '0002_usergameprogress_finished_ts_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='usergameprogress',
+            name='user',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+        ),
+    ]

+ 6 - 3
profiles/models.py

@@ -2,6 +2,7 @@ from django.contrib.auth import get_user_model
 from django.core.validators import MaxValueValidator, MinValueValidator
 from django.db import models
 from django.db.models.deletion import CASCADE, DO_NOTHING
+from django.utils import timezone
 from django_extensions.db.models import TimeStampedModel
 from games.models import Game
 
@@ -9,8 +10,10 @@ User = get_user_model()
 
 
 class UserGameProgress(TimeStampedModel):
-    user = models.OneToOneField(User, on_delete=models.CASCADE)
+    user = models.ForeignKey(User, on_delete=models.CASCADE)
     game = models.ForeignKey(Game, on_delete=DO_NOTHING)
+    started_ts = models.DateTimeField(default=timezone.now, blank=True)
+    finished_ts = models.DateTimeField(blank=True, null=True)
     percent = models.IntegerField(
         default=0,
         validators=[MaxValueValidator(100), MinValueValidator(0)],
@@ -18,11 +21,11 @@ class UserGameProgress(TimeStampedModel):
     )
 
     def __str__(self):
-        return f"Progress in {self.game} for {self.user} {self.percent}"
+        return f"Progress in {self.game} for {self.user} ({self.percent}%)"
 
 
 class UserProfile(models.Model):
-    user = models.OneToOneField(User, on_delete=CASCADE)
+    user = models.OneToOneField(User, on_delete=CASCADE, related_name="profile")
     favorite_games = models.ManyToManyField(Game, related_name="favorite_games")
 
     def __str__(self):

+ 8 - 0
templates/games/game_list.html

@@ -3,6 +3,14 @@
 {% block title %}Games{% endblock %}
 
 {% block content %}
+    {% if request.user.profile.favorite_games %}
+        <h2>Favorites</h2>
+        <ul>
+        {% for game in request.user.profile.favorite_games.all %}
+            <li><a href="{{game.get_absolute_url}}">{{game}}</a></li>
+        {% endfor %}
+        </ul>
+    {% endif %}
     {% if todays_game and 'page' not in request.GET %}
      <div class="d-flex flex-column">
         <div class="image-grid-container">