pipikej
pipikej

Reputation: 305

List objects of logged current user

I would like to ask how I could list all objects of logged current user via class based view in django.

I have two apps in the project. One is called users and the other one is badminton.

users/models.py

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
   user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
   name = models.CharField(max_length=200, null=True)

badminton/models.py

from django.db import models
from users import models as users_models 

class Player(models.Model):
    name = models.OneToOneField(users_models.Profile ,null=True, on_delete=models.CASCADE)
    matches_played = models.IntegerField(default=0, blank=True, null=True)

class Match(models.Model):
    player_home = models.OneToOneField(Player, null=True, on_delete= models.SET_NULL, related_name='player_home')
    player_away = models.OneToOneField(Player, null=True, on_delete= models.SET_NULL, related_name='player_away')

How I can access all matches of logged user via queryset? Thank you for your help!

Upvotes: 1

Views: 28

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476594

You can list Matches for which the request.user has as Player object player_home and/or player_away for that match with:

from django.db.models import Q

Match.objects.filter(
    Q(player_home__name__user=request.user) |
    Q(player_away__name__user=request.user)
)

Note: A foreign key refers to an object, not to the string representation of that object. Therefore name is not really a good name to refer to a Profile object. You might want to consider renaming it to profile.

Upvotes: 1

Related Questions