AttributeError: type object 'User' has no attribute 'name'
Asked Answered
F

2

13

I’m new with graphene and I have this:

from django.contrib.auth.models import User

class UserType(DjangoObjectType):
    class Meta:
        model = User

Basically, using Django’s User class is giving me this error, because before using the django User class, I was using my own User definition and it worked. Why using the User class from the django authentication framework is giving me the error mentioned in the title:

File “/usr/local/lib/python3.6/site-packages/graphql/type/typemap.py”, line 60, in reducer if type.name in map: AttributeError: type object ‘User’ has no attribute ‘name’

Am I missing something?

Regards

PD: I’m using Django 2.0.4

Traceback

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x107c49e18>
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 120, in inner_run
    self.check(display_num_errors=True)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 364, in check
    include_deployment_checks=include_deployment_checks,
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 351, in _run_checks
    return checks.run_checks(**kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/core/checks/registry.py", line 73, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 13, in check_url_config
    return check_resolver(resolver)
  File "/usr/local/lib/python3.6/site-packages/django/core/checks/urls.py", line 23, in check_resolver
    return check_method()
  File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 397, in check
    for pattern in self.url_patterns:
  File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 36, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 536, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/usr/local/lib/python3.6/site-packages/django/utils/functional.py", line 36, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/usr/local/lib/python3.6/site-packages/django/urls/resolvers.py", line 529, in urlconf_module
    return import_module(self.urlconf_name)
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/Users/freddy/PycharmProjects/DYD/DYD/urls.py", line 19, in <module>
    from dyd_server.graphql import schema
  File "/Users/freddy/PycharmProjects/DYD/dyd_server/graphql/__init__.py", line 10, in <module>
    schema = graphene.Schema(query=RootQuery, mutation=Mutations)
  File "/usr/local/lib/python3.6/site-packages/graphene/types/schema.py", line 57, in __init__
    self.build_typemap()
  File "/usr/local/lib/python3.6/site-packages/graphene/types/schema.py", line 123, in build_typemap
    schema=self
  File "/usr/local/lib/python3.6/site-packages/graphene/types/typemap.py", line 69, in __init__
    super(TypeMap, self).__init__(types)
  File "/usr/local/lib/python3.6/site-packages/graphql/type/typemap.py", line 16, in __init__
    self.update(reduce(self.reducer, types, OrderedDict()))
  File "/usr/local/lib/python3.6/site-packages/graphene/types/typemap.py", line 77, in reducer
    return self.graphene_reducer(map, type)
  File "/usr/local/lib/python3.6/site-packages/graphene/types/typemap.py", line 107, in graphene_reducer
    return GraphQLTypeMap.reducer(map, internal_type)
  File "/usr/local/lib/python3.6/site-packages/graphql/type/typemap.py", line 80, in reducer
    field_map = type.fields
  File "/usr/local/lib/python3.6/site-packages/graphql/pyutils/cached_property.py", line 16, in __get__
    value = obj.__dict__[self.func.__name__] = self.func(obj)
  File "/usr/local/lib/python3.6/site-packages/graphql/type/definition.py", line 180, in fields
    return define_field_map(self, self._fields)
  File "/usr/local/lib/python3.6/site-packages/graphql/type/definition.py", line 189, in define_field_map
    field_map = field_map()
  File "/usr/local/lib/python3.6/site-packages/graphene/types/typemap.py", line 250, in construct_fields_for_type
    map = self.reducer(map, field.type)
  File "/usr/local/lib/python3.6/site-packages/graphene/types/typemap.py", line 77, in reducer
    return self.graphene_reducer(map, type)
  File "/usr/local/lib/python3.6/site-packages/graphene/types/typemap.py", line 107, in graphene_reducer
    return GraphQLTypeMap.reducer(map, internal_type)
  File "/usr/local/lib/python3.6/site-packages/graphql/type/typemap.py", line 80, in reducer
    field_map = type.fields
  File "/usr/local/lib/python3.6/site-packages/graphql/pyutils/cached_property.py", line 16, in __get__
    value = obj.__dict__[self.func.__name__] = self.func(obj)
  File "/usr/local/lib/python3.6/site-packages/graphql/type/definition.py", line 180, in fields
    return define_field_map(self, self._fields)
  File "/usr/local/lib/python3.6/site-packages/graphql/type/definition.py", line 189, in define_field_map
    field_map = field_map()
  File "/usr/local/lib/python3.6/site-packages/graphene/types/typemap.py", line 250, in construct_fields_for_type
    map = self.reducer(map, field.type)
  File "/usr/local/lib/python3.6/site-packages/graphene/types/typemap.py", line 78, in reducer
    return GraphQLTypeMap.reducer(map, type)
  File "/usr/local/lib/python3.6/site-packages/graphql/type/typemap.py", line 60, in reducer
    if type.name in map:
AttributeError: type object 'User' has no attribute 'name'
Fretwell answered 13/4, 2018 at 4:21 Comment(3)
I think you'd used user_obj.name in your code. Replace that with user_obj.usernameInclement
@JerinPeterGeorge no I'm not, the obj.name call i have in my project is country_gql = CountryType(id=country_db.id, code=country_db.code, name=country_db.name), where country_db is another model class. Thanks for you answer my friend.Fretwell
The User model in django.contrib.auth.models has a name field. Try using first_name or last_namePhotocomposition
M
28

This is a cryptic error that happens when Django Model classes are accidentally used in code instead of graphene Type classes. For example, make sure that your query is something like

user = graphene.Field(UserType)

instead of

user = graphene.Field(User)
Madrid answered 14/4, 2018 at 17:50 Comment(3)
I made this same mistake a bunch of times -- maybe I'll make a pull request to make the error friendlier, e.g. "Object "User" is not a "DjangoObjectType"Madrid
Thankyou, Problem solved, I am new to django, but have a php laravel background and i sometimes can not understand the errors that django throw at us.Apiary
Well, it doesn't look like I'm ever going to get around to making that pull request. Be my guest, dear reader.Madrid
M
0

As suggested by your error, Django's default User model does not have a field called name.

Instead, it has two similar fields, first_name, and last_name.

If you would like to use the combination of the two, use the get_full_name() method.

Mcgaha answered 13/4, 2018 at 8:2 Comment(1)
But my question is mor related to where the issue is? In my model or in my schema? because it doesn’t make any sense that User model doesn’t have any name attribute when en my entire project I’m not using obj.name because I don’t have it only for my country model which only has two field: name and code. :(Fretwell

© 2022 - 2024 — McMap. All rights reserved.