0

I have created a custom user model 'User' and have declared in settings.py as AUTH_USER_MODEL Also i have two other models consumer and workman which has an onetoone relation with my custom user. i created two forms for registering customer and workman but as i fill form(it doesnt even check validation) and submit, it says: Manager isn't available; 'auth.User' has been swapped for 'accounts.User'

models.py:

from django.contrib.auth.models import AbstractUser
from django.contrib.auth import  get_user_model

# Create your models here.

class User(AbstractUser):

    class Types(models.TextChoices):
        CONSUMER = "CONSUMER" , "Consumer"
        WORKMAN = "WORKMAN" , "Workman"
    type = models.CharField(max_length=20,choices=Types.choices,default=Types.WORKMAN)

    is_consumer = models.BooleanField(default=False)
    is_workman = models.BooleanField(default=False)

class Consumer(models.Model):
    user = models.OneToOneField(get_user_model(),on_delete=models.CASCADE,primary_key=True)
    location = models.CharField(max_length=100)

class Workman(models.Model):
    user = models.OneToOneField(get_user_model(),on_delete=models.CASCADE,primary_key=True)
    contact = models.CharField(max_length=100)

views.py:

from .forms import ConsumerCreationForm, WorkmanCreationForm
from .models import Workman,Consumer

class consumersignupview(CreateView):
    model = Consumer
    form_class = ConsumerCreationForm
    template_name = 'accounts/register.html'
    success_url = '/'


class workmansignupview(CreateView):
    model = Workman
    form_class = WorkmanCreationForm
    template_name = 'accounts/register.html'
    success_url = '/'

forms.py:

from django.contrib.auth.forms import UserCreationForm
from django import forms
from .models import Consumer,Workman

class ConsumerCreationForm(UserCreationForm):
    location = forms.CharField( max_length=100, required=False)
    class meta(UserCreationForm.Meta):
        model = Consumer
        
class WorkmanCreationForm(UserCreationForm):
    contact = forms.CharField(max_length=100)

    class meta(UserCreationForm.Meta):
        model = Workman

error: enter image description here

full traceback:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/account/wregister/

Django Version: 3.2.9
Python Version: 3.8.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'accounts.apps.AccountsConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\views\generic\base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\views\generic\base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\views\generic\edit.py", line 172, in post
    return super().post(request, *args, **kwargs)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\views\generic\edit.py", line 141, in post
    if form.is_valid():
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\forms\forms.py", line 175, in is_valid
    return self.is_bound and not self.errors
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\forms\forms.py", line 170, in errors
    self.full_clean()
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\forms\forms.py", line 374, in full_clean
    self._post_clean()
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\contrib\auth\forms.py", line 117, in _post_clean
    super()._post_clean()
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\forms\models.py", line 413, in _post_clean
    self.instance.full_clean(exclude=exclude, validate_unique=False)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\db\models\base.py", line 1223, in full_clean
    self.clean()
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\contrib\auth\models.py", line 371, in clean
    self.email = self.__class__.objects.normalize_email(self.email)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\db\models\manager.py", line 187, in __get__
    raise AttributeError(

Exception Type: AttributeError at /account/wregister/
Exception Value: Manager isn't available; 'auth.User' has been swapped for 'accounts.User'

1 Answers1

0

This error is a repeat of this issue. You are likely importing the wrong user model somewhere.

dichter
  • 49
  • 3
  • Yeah i went through those solutions but there are no any 'User' mentioned anywhere in my code so the solution didnt help much. – Rupesh Chaulagain Nov 11 '21 at 18:50
  • Hmm, how are you attaching a `User` to the consumer? It seems to be a required field based on the model, but I don't see you assign it anywhere in the view. You also don't need to import `get_user_model()` because the model is in the same file. – dichter Nov 11 '21 at 19:35
  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Nov 11 '21 at 22:19