【问题标题】:how to fetch related items in django many to many relation如何在 django 多对多关系中获取相关项目
【发布时间】:2021-05-11 20:48:20
【问题描述】:

在列表 l 中,我需要与特定员工关联的部门列表,但它会抛出 “用户”对象没有属性“dep__department”

    class Dep(models.Model):
        department = models.CharField(max_length=255, blank=True, null=True)
    
    
    class EMP(models.Model):
        id = ShortUUIDField(primary_key=True, editable=False)
        email = models.EmailField(verbose_name="email address", max_length=255, unique=True)
        phone = models.CharField(max_length=50, null=True)
        first_name = models.CharField(max_length=50)
        last_name = models.CharField(max_length=50)
        dep = models.ManyToManyField(Dep)

views.py

       l=[]
       users=EMP.objects.filter(some filter condition)
       for d in users:
         l.append(d.dep__department)

【问题讨论】:

  • 你没有提供用户模型,所以我猜它没有错误提示的 Dep 属性
  • @Someprogammer 对不起我的错,它是 EMP.objects.filter(some filter condition) ,但错误仍然存​​在
  • 如果您的问题得到解决,请接受答案

标签: python python-3.x django django-models django-rest-framework


【解决方案1】:

d.dep 应该是您部门类的直接实例,因此您可以直接通过 d.dep.department 获取部门名称。

编辑: 您可以使用d.dep.all() 遍历实例

所以你的代码变成了:

l=[]
users=EMP.objects.filter(some filter condition)
for d in users:
   for dep in d.dep.all():
      l.append(dep.department)

【讨论】:

  • 试过了,现在抛出“ManyRelatedManager' object has no attribute department”
  • 是的,抱歉 d.dep 是 Department 实例的查询集,您可以使用 d.dep.all() 遍历它们。然后对于这些实例,您可以获得他们的属性,例如部门。
  • d.dep 是不可迭代的,你的意思可能类似于 for dep in d.dep.all():
【解决方案2】:

只需使用d.dep.all() 即可获取用户的所有dep。

【讨论】:

  • 试过了,现在抛出“ManyRelatedManager' object has no attribute department”
  • 我编辑了我的评论,这是你想要的吗?
  • 我错过了 dep 是一个 ManyToMany,d.dep 是一个经理,所以你应该使用 all() 或 filter() 来获得你正在寻找的部门
猜你喜欢
  • 1970-01-01
  • 2016-07-20
  • 2012-03-05
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 2015-04-12
相关资源
最近更新 更多