Proxy User and AUTH_USER_MODEL: TypeError: MyUser cannot proxy the swapped model 'myapp.MyUser'.

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Proxy User and AUTH_USER_MODEL: TypeError: MyUser cannot proxy the swapped model 'myapp.MyUser'.

Nicolas Pantel
Hi,

I need help on the topic: Proxy for User model referenced as AUTH_USER_MODEL.

As stated in the doc, needing to add some methods to User model, I tried to make a 'proxy' model.

I made a 'from scratch app', with only a MyUser(User) model, and AUTH_USER_MODEL = 'myapp.MyUser' in settings.py
MyUser has only 'class Meta: proxy = True'

On a ./manage.py shell (for example), I have the following traceback:

Traceback (most recent call last):
  File "./manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 337, in execute
    django.setup()
  File "/usr/local/lib/python3.6/dist-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python3.6/dist-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models()
  File "/usr/local/lib/python3.6/dist-packages/django/apps/config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "/home/npantel/proxy_user/proxy_user/models.py", line 4, in <module>
    class MyUser(User):
  File "/usr/local/lib/python3.6/dist-packages/django/db/models/base.py", line 158, in __new__
    raise TypeError("%s cannot proxy the swapped model '%s'." % (name, base_meta.swapped))
TypeError: MyUser cannot proxy the swapped model 'proxy_user.MyUser'.

Anybody already tried to use proxy on User model?

Thanks,
Nicolas Pantel

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/265cae1b-ef97-4880-bd5b-f6cec2072263%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Proxy User and AUTH_USER_MODEL: TypeError: MyUser cannot proxy the swapped model 'myapp.MyUser'.

Tim Graham-2
The behavior seems expected. https://docs.djangoproject.com/en/dev/topics/auth/customizing/#custom-users-and-proxy-models

It looks like if you use a proxy model, then you should import it where needed rather than use AUTH_USER_MODEL.

On Saturday, April 14, 2018 at 6:34:59 PM UTC-4, Nicolas Pantel wrote:
Hi,

I need help on the topic: Proxy for User model referenced as AUTH_USER_MODEL.

As stated in the doc, needing to add some methods to User model, I tried to make a 'proxy' model.

I made a 'from scratch app', with only a MyUser(User) model, and AUTH_USER_MODEL = 'myapp.MyUser' in settings.py
MyUser has only 'class Meta: proxy = True'

On a ./manage.py shell (for example), I have the following traceback:

Traceback (most recent call last):
  File "./manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 337, in execute
    django.setup()
  File "/usr/local/lib/python3.6/dist-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python3.6/dist-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models()
  File "/usr/local/lib/python3.6/dist-packages/django/apps/config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "/home/npantel/proxy_user/proxy_user/models.py", line 4, in <module>
    class MyUser(User):
  File "/usr/local/lib/python3.6/dist-packages/django/db/models/base.py", line 158, in __new__
    raise TypeError("%s cannot proxy the swapped model '%s'." % (name, base_meta.swapped))
TypeError: MyUser cannot proxy the swapped model 'proxy_user.MyUser'.

Anybody already tried to use proxy on User model?

Thanks,
Nicolas Pantel

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/1567fa85-dfe0-4a93-9a5e-75f4f3881c18%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.