如何在具有 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
我有一个 "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