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

时间:2017-01-31 00:17:21

标签: python django many-to-many relational-database django-queryset

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

我试着打电话来得到这个工作人员属于哪些团体的回复,但我一直在犯错误。

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

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()

以及其他一些我无法记住的方法,但我一直在犯错误。

提前致谢

2 个答案:

答案 0 :(得分:5)

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

Deny from all

答案 1 :(得分:1)

在我的情况下,我试图访问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^