Django检查ManyToMany字段中的对象
Posted
技术标签:
【中文标题】Django检查ManyToMany字段中的对象【英文标题】:Django check if object in ManyToMany field 【发布时间】:2013-05-19 07:49:30 【问题描述】:我有一个很简单的问题要解决。我有与其关联的 >= 0 个用户的合作伙伴模型:
class Partner(models.Model):
name = models.CharField(db_index=True, max_length=255)
slug = models.SlugField(db_index=True)
user = models.ManyToManyField(User)
现在,如果我有一个用户对象和一个合作伙伴对象,那么检查用户是否与合作伙伴关联的最 Pythonic 方式是什么?如果User
与Partner
相关联,我基本上想要一个返回True 的语句。
我试过了:
users = Partner.objects.values_list('user', flat=True).filter(slug=requested_slug)
if request.user.pk in users:
# do some private stuff
这可行,但我觉得有更好的方法。此外,考虑到我需要一个命名参数 (slug
) 和一个请求对象 (user
),这是否容易滚入装饰器。
【问题讨论】:
【参考方案1】:if user.partner_set.filter(slug=requested_slug).exists():
# do some private stuff
【讨论】:
太棒了。我知道有一些不那么冗长的方式。谢谢。 如何在else中提升http403?返回 HttpResponseForbidden 抛出错误 我猜,因为我看不到您的完整上下文,但看起来您正在尝试返回课程。相反,您必须实例化它:return HttpResponseForbidden()
.
这里特定合作伙伴的过滤在哪里?
@Alex78191 - 它是自动创建的反向关系访问器。因为Partner
与User
有关系,所以User
实例具有访问器属性partner_set
。有关详细信息,请参阅文档:docs.djangoproject.com/en/2.2/topics/db/queries/…【参考方案2】:
如果我们只需要知道user
对象是否与partner
对象相关联,我们可以执行以下操作(如this answer):
if user in partner.user.all():
#do something
【讨论】:
以上是关于Django检查ManyToMany字段中的对象的主要内容,如果未能解决你的问题,请参考以下文章
Django / Python - 在对象创建中使用ManyToMany字段
Django - 按添加到 ManyToMany 字段的最后一个元素查询对象
如何在django中查询具有manytomany字段指向它们的对象