web-dev-qa-db-ja.com

AttributeError: 'ManyToManyDescriptor'オブジェクトには属性がありません 'all'-django

他の多くのグループモデルに割り当てることができるスタッフモデルがあります

このスタッフがどのグループに属しているかを確認するために電話をかけてみましたが、エラーが発生し続けます。

誰かが私に手を貸してくれませんか?ユーザーモデル

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

思い出せない他の方法もありますが、エラーが発生し続けます。

前もって感謝します

5
Dora

Django filter()は、結果のコンテナーであるQuerySetオブジェクトを返します。したがって、フィールドにアクセスする前に、特定の結果オブジェクトを選択する必要があります。

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

私の場合、モデルが返すことができるデータオブジェクトではなく、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^
1
ThorSummoner