2016-05-16 1 views
1

J'ai un modèle "messages" qui a un ManyToManyField pour "utilisateur". Sur le site d'administration, je peux ajouter un message pour plusieurs utilisateurs. J'essaye de créer une vue qui peut filtrer les messages selon le user_id. Depuis une nouvelle table dans la base de données est créée pour cette ManyToManyField, comment puis-je obtenir le mêmeComment filtrer un jeu de requête dans un modèle django ayant un ManyToManyField?

class Messages(models.Model): 
id = models.AutoField(primary_key=True) 
message = models.CharField('Message',max_length=1000) 
user = models.ManyToManyField('user',blank=True,null=True) 
... 

Je veux faire quelque chose comme:

def sendMessage(userId) 
    messageObj = Messages.objets.filter(user_id=userId) 

Quelqu'un peut-il me aider et dire comment je peux filtrer les messages pour un utilisateur spécifique? Merci d'avance.

Répondre

0

Pour filtrer les messages pour un utilisateur spécifique, votre code semble correct (il a juste une faute de frappe). Il devrait être quelque chose comme ceci:

queryset = Messages.objects.filter(user=user) 

Si vous souhaitez utiliser le userID (je le renommer comme user_id, personnellement):

queryset = Messages.objects.filter(user.id=user_id) 

Ces deux vous donnera une queryset, qui est une structure semblable à un tableau. Vous pouvez continuer à filtrer si vous avez besoin d'une valeur plus granulaire. Par exemple:

queryset.filter(message="this is my message").first() # this will now give you a single element 
+0

Merci Bro @djq :) Je l'ai 'queryset = Messages.objects.filter (user__id = user_id)' et ça a marché. –

0

Définissez un related_name pour la relation.

class Messages(models.Model): 
... 
user = models.ManyToManyField('user',blank=True,null=True, related_name='messages') 
... 

Ensuite, vous pouvez tout simplement faire user.messages, qui retourne un QuerySet avec les messages de l'utilisateur