GraphQL AttributeError: модуль 'графен' не имеет атрибута 'Герои' - PullRequest
0 голосов
/ 26 октября 2019

Я новичок в Django & GraphQL, у меня возникла проблема на первом шаге, я не могу связаться с GraphiQL, у меня произошла ошибка

Could not import 'traindjango.schema.schema' for Graphene setting 'SCHEMA'.
AttributeError: module 'graphene' has no attribute 'Heroes'.

traindjango / heroes / schema. py

import graphene
from graphene_django import DjangoObjectType

from .models import Heroes


class HeroesType(DjangoObjectType):
    class Meta:
        model = Heroes


class Query(graphene.ObjectType):
    heroes = graphene.Heroes(HeroesType)

    def resolve_links(self, info, **kwargs):
        return Heroes.objects.all()

traindjango / traindjango / schema.py

import graphene

import heroes.schema


class Query(heroes.schema.Query, graphene.ObjectType):
    pass


schema = graphene.Schema(query=Query)

traindjango / traindjango / settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'heroes',
    'graphene_django',
]

GRAPHENE = {
    'SCHEMA' : 'traindjango.schema.schema',
}

traindjango / heroes / models.py

from django.db import models

class Heroes(models.Model):
    name  = models.CharField(max_length=100, verbose_name='Name') 
    power = models.IntegerField(default=0)
    city  = models.TextField(max_length=100, verbose_name='City' ,null=True, blank=True)

Не могли бы вы помочь мне, что я могу сделать?

Большое спасибо

1 Ответ

0 голосов
/ 30 октября 2019

Вместо

heroes = graphene.Heroes(HeroesType)

Вам нужно

heroes = graphene.List(HeroesType)

Heroes - это ваша модель, а не графен.

Затем вам нужно переименовать resolve_links в resolve_heroes

PS Хорошей практикой является называть ваши модули django в единственном числе, то есть Hero, а не Heroes. Вы можете установить подробное имя множественного числа в Meta, если оно не просто добавляет 's'.

...