如何在具有 ManyToManyField 的 Django 模型中过滤查询集?

How to filter a queryset in django model having a ManyToManyField?

我有一个 "messages" 模型,它有一个 ManyToManyField 用于 "user"。 在管理站点中,我可以为多个用户添加一条消息。我正在尝试创建一个可以根据 user_id 过滤消息的视图。由于在数据库中为这个 ManyToManyField 创建了一个新的 table,我怎样才能实现相同的

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)
...

我想做这样的事情:

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

任何人都可以帮助我并告诉我如何过滤特定用户的消息? 提前致谢。

要过滤特定用户的消息,您的代码看起来是正确的(只是有一个拼写错误)。它应该是这样的:

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

如果你想使用userID(我个人会重命名为user_id):

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

这两个都会给你一个queryset,这是一个像structure.You这样的数组,如果你需要更细粒度的值,可以继续向下过滤。例如:

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

为关系设置一个related_name

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

然后您可以简单地执行 user.messages,其中 returns 一个包含用户消息的 QuerySet