AttributeError: 'ManyToManyDescriptor' 对象没有属性 'all' - django

Posted

技术标签:

【中文标题】AttributeError: \'ManyToManyDescriptor\' 对象没有属性 \'all\' - django【英文标题】:AttributeError: 'ManyToManyDescriptor' object has no attribute 'all' - djangoAttributeError: 'ManyToManyDescriptor' 对象没有属性 'all' - django 【发布时间】:2017-06-16 07:22:50 【问题描述】:

我有一个员工模型,可以分配给许多其他组模型

我尝试打电话询问该员工属于哪些组,但我不断收到错误消息。

有人可以帮帮我吗? 用户模型

class Staff(Model):
    groups = ManyToManyField(Group,
                             related_name="%(class)ss",
                             related_query_name="%(class)s",
                             blank=True)

class Group(Model):
    creator = ForeignKey(Employer,
                         on_delete=CASCADE,
                         related_name="%(class)ss",
                         related_query_name="%(class)s")
    group_name = CharField(max_length=256, unique=True)
    created_at = DateTimeField(auto_now_add=True)

我尝试了几种方法,例如

staff = Staff.objects.filter(pk=1)
groups = staff.group.all()  # or 
groups = staff.group_set.all()  # or
groups = staff.group.filter()

还有一些我不记得但我不断出错的方式。

提前致谢

【问题讨论】:

这是组。所以让 groups = staff.groups.all() @sebb 我会收到类似AttributeError: 'QuerySet' object has no attribute 'groups'的错误 【参考方案1】:

Django filter() 返回一个 QuerySet 对象,它是一个结果容器。因此,您需要在尝试访问字段之前选择一个特定的结果对象。

results = Staff.objects.filter(pk=1)
for staff in results:
    print staff.groups.all()

【讨论】:

它发出两个查询 - 一个用于过滤,另一个用于组。一位面试官问我 - 可以一次性完成吗?【参考方案2】:

在我的例子中,我试图访问 models.Model 类的属性,而不是模型可以返回的数据对象。举例说明

django.db

class BarModel(django.db.models.Model):
    name = django.db.models.CharField(256)
    ...

class FooModel(django.db.models.Model):
    bar = django.db.models.ForeignKey('BarModel')

FooModel.bar.name  # AttributeError
# the attribute of the model doesn't exist^
# *** AttributeError: 'ForwardManyToOneDescriptor' object has no attribute 'name'

FooModel.objects.all()[0].bar.name
# the attribute I meant to reference^

【讨论】:

以上是关于AttributeError: 'ManyToManyDescriptor' 对象没有属性 'all' - django的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“字节”对象没有属性“告诉”

AttributeError: 'RDD' 对象没有属性 'show'

AttributeError:“NumpyArrayIterator”对象没有属性“类”

AttributeError:模块 'dbus' 没有属性 'lowlevel'

AttributeError:模块'keras'没有属性'initializers'

AttributeError:“会话”对象没有属性“会话”