2017-07-09 1 views
1

J'ai deux modèles vraiment similaires avec le champ M2M, en quelque sorte j'ai essayé d'interroger l'un d'entre eux qui fonctionne parfaitement mais quand j'essaie le même code avec l'autre, il me donne des erreurs. La seule différence que je peux trouver est le related_namecomment interroger M2M avec related_name

J'ai trouvé une solution de contournement, mais je suis toujours curieux comment puis-je obtenir ce travail si je rencontrais le même problème la prochaine fois. (J'ai seulement écrit le champ M2M que j'ai, et chaque modèle ne possède qu'un seul champ M2M, même si je pense à ça, que faire quand il y a plus d'un M2M, mais c'est hors de question)

c'est le modèle de travail que j'ai

class Team(View): 
    members = models.ManyToManyField(User, blank=True) 

est la vue avec le modèle ci-dessus, (sauter le class, le def post et ainsi de suite)

user = User.objects.filter(id=111).first() 
all_members = user.Team_set.filter() # this would return all 

ci-dessous est le modèle qui me donne des problèmes

class Room(View): 
    participants = models.ManyToManyField(User, blank=True, related_name='participants') 

c'est la vue avec le modèle ci-dessus

user = User.objects.filter(id=111).first() 
all_p = user.room_set.filter() # this then gives me error of 'User' object has no attribute 'room_set' 

Merci d'avance pour toute aide

Répondre

1

Lors de la définition related_name vous devez utiliser comme ceci:

Model.related_name.* 

l'alias related_model_set est détruit.

Cela dit votre code devrait ressembler à:

user = User.objects.filter(id=111).first() 
all_p = user.participants.filter() # this then gives me error of 'User' object has no attribute 'room_set' 
+0

ah! ok, donc ça va faire comme un champ de 'utilisateur' – Tsuna

+0

qui a fonctionné ~ thx thx, mais besoin d'attendre quelques minutes jusqu'à ce que je puisse accepter la réponse – Tsuna

+0

@Tsuna content que cela a aidé! – pythad