2015-10-30 1 views
1

Ceci est mon models.py (j'utilise le modèle par défaut Django utilisateur ainsi):Django - Comment accéder correctement la relation inverse ManyToManyField

class UserExtended(models.Model): 
    user = models.OneToOneField(User, related_name="userextended_set") 
    location = models.ForeignKey(Location) 
    follow = models.ManyToManyField(User, related_name="follow_set") 

Maintenant, pour accéder à une liste d'utilisateurs « suivre » d'un utilisateur particulier (les utilisateurs d'un utilisateur particulier est la suite), je ferais quelque chose comme ceci:

a = User.objects.get(username='a') 
a.userextended_set.follow.count() 

Ma question est, comment puis-je obtenir une liste d'utilisateurs qui un utilisateur particulier est sur le « suivi 'liste de (ie qui le suit)? J'ai essayé ceci:

# Assuming user 'a' is on the 'follow' list of only one users (i.e. 
# assuming .get() will only return one user object). 
User.objects.get(username='a').follow_set.get().username 

mais je reçois une erreur disant

AttributeError: 'UserExtended' object has no attribute 'username' 
+0

'User.objects.get (nom d'utilisateur = 'a'). Follow_set.get()' renvoie une instance 'UserExtended' , qui n'a pas de champ "nom d'utilisateur". Le champ 'username' appartient à' User' –

+0

@ CésarBustíos Correct. Comment puis-je obtenir une liste d'utilisateurs qu'un utilisateur particulier est sur la liste 'follow' de (c'est-à-dire qui le suit)? – user2719875

+0

Depuis 'UserExtended' vous pouvez appeler n'importe quelle méthode QuerySet ->' a.userextended_set.follow.all() ' – Gocht

Répondre

0

Je pense que cela pourrait être ce dont vous avez besoin:

user # this is your user 
UserExtended.objects.filter(follow=user) 
0

S'il vous plaît essayez ceci:

user_ids = UserExtended.objects.filter(follow__username='a') \ 
           .values_list('user', flat=True).distinct() 
result_users = User.objects.filter(id__in=user_ids)