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: 'RDD' 对象没有属性 'show'
AttributeError:“NumpyArrayIterator”对象没有属性“类”
AttributeError:模块 'dbus' 没有属性 'lowlevel'