I've been trying to create a custom user to store extra fields in Django, but after specifying the new User and deleting the old database, Django does not want to make a table or any migrations for my app "accounts"
Error (when doing anything user related e.g. logging in):
django.db.utils.OperationalError: no such table: accounts_user
Auth User Model in settings.py:
AUTH_USER_MODEL = 'accounts.User'
Installed apps:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts',
'forum',
]
accounts/models.py:
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
pass
Edit:
I apologize, I forgot to mention. I have run makemigrations and migrate.
Makemigrations returns "No changes detected." Migrate does everything but any models existing in my accounts/models.py
Turns out I had to specifically run "makemigrations accounts". Not sure why, but it worked.
Related
The table wasn't created when I made custom user model.
In my settings.py, I installed my app and defined AUTH_USER_MODEL
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
#My apps
'accounts',
]
AUTH_USER_MODEL = 'accounts.User'
my model is below (at accounts app)
class User(AbstractBaseUser):
key = models.AutoField(primary_key=True)
email= models.EmailField('email',unique=True)
name=models.CharField('name',max_length=20) #model.USERNAME_FIELD
is_active=models.BooleanField('is_active',default=True)
is_admin=models.BooleanField('is_admin',default=False)
date_joined = models.DateTimeField('date_joined',default=timezone.now)
objects = UserManager()
USERNAME_FIELD = 'email'
#EMAIL_FIELD = 'email'
class Meta:
swappable = "AUTH_USER_MODEL"
I executed makemigrations && migrate.
And I've also tried makemigrations accounts && migrate accounts
but still there is no accounts_user table.
Step-1 delete migration folder
Step-2 run command (python manage.py makemigrations your app name
Step -3 run command (python manage.py migrate)
If still not working...??
repate above steps
but this time also deleted sqlite3 database
I am trying to install the sites package and upon running makemigrations am receiving the error:
django.contrib.admin.sites.AlreadyRegistered: The model Site is
already registered in app 'sites'.
This is my admin.py:
from django.contrib import admin
# Register your models here.
from django.apps import apps
models = apps.get_models()
for model in models:
try:
admin.site.register(model)
except admin.sites.AlreadyRegistered:
pass
And here are my installed apps:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'webpage',
'django_user_agents',
'analytical',
'corsheaders',
'django.contrib.sites',
]
Any idea what might be causing this issue? Please let me know if there is information missing.
You are registering all models of all apps in your admin.py. You seem to be aware of the fact that some model may already be registered and use a try-except block to catch that. But the problem is that other packages don't know that you are doing this and obviously won't use try-except blocks. You get the error because you successfully register the model Site with the admin site but then when django.contrib.sites tries to register the same it fails since it is already registered.
One solution may to be order your INSTALLED_APPS better and your apps be last. Currently you have django.contrib.sites listed after many apps (even third party ones):
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites', # Move it here
'webpage',
'django_user_agents',
'analytical',
'corsheaders',
]
Again this might cause errors if some other apps try to register their models. Instead of doing this brute force registering of all models consider registering the models for only your app inside it's admin.py:
from django.contrib import admin
# Register your models here.
from django.apps import apps
app_config = apps.get_app_config('your_app_name') # Replace your_app_name it is just a placeholder
models = app_config.get_models()
for model in models:
try:
admin.site.register(model)
except admin.sites.AlreadyRegistered:
pass
Your admin registered the models of sites app before sites app, the best solution is to skip the sites model in your admin so the admin in sites can register its models.
I want extend Application model of django oauth toolkit. They have given intsructions here link
But i am not getting how to do it. I have created one app inside apps folder and inside models i have added the following code.
from django.db import models
from oauth2_provider.models import AbstractApplication
class MyApplication(AbstractApplication):
logo = models.ImageField()
agree = models.BooleanField()
Resgitered the app inside installed_apps as 'apps.oauth2', and added the following line:
OAUTH2_PROVIDER_APPLICATION_MODEL='apps.OAuth2'
But it giving me error
LookupError: No installed app with label 'apps'.
Installed Apps [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'crispy_forms',
'apps.commons',
'apps.company',
'apps.oauth2',
]
According this manual link model in OAUTH2_PROVIDER_APPLICATION_MODEL should be class name not app
I am unable to replace default django user model with my own custom user model.
yes, i have AUTH_USER_MODEL = 'appName.modelName' set in settings.py
here's my code
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'userProfile',
'user_authorisation',
]
AUTH_USER_MODEl = 'userProfile.myUser'
userProfile/models.py
https://dpaste.de/Aerm
userProfile.forms.py https://dpaste.de/0eOO
userProfile/admin.py https://dpaste.de/Rm5S
After all this, Default user model is still showing in django admin
and also, when creating super user via the command python manage.py createsuperuser , it is creating the super user of the default user model.
It's typo in your settings AUTH_USER_MODEl, should be AUTH_USER_MODEL instead.
I am trying to customize Products and few other models in the catalogue app following the documentation.
I have forked catalogue app (to myproject/boscar/catalogue) as per documentation documentation and my updated boscar/catalogue/models.py:
from django.db import models
from oscar.apps.catalogue.abstract_models import AbstractProduct
class Product(AbstractProduct):
is_active = models.BooleanField(default=False)
from oscar.apps.catalogue.models import *
I have already included the modified catalogue app, in the INSTALLED_APPS in settings.py as an argument for get_core_apps function.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django.contrib.sites',
'django.contrib.flatpages',
'bmigrate',
'compressor',
'widget_tweaks',
'boscar'
] + get_core_apps(['boscar.catalogue'])
Migrations are automatically copied to my local app when I executed this command manage.py oscar_fork_app catalogue boscar.
My issue is when I execute the makemigrations command (python "manage.py makemigrations boscar"), it shows "No changes detected in app 'boscar'". But I already made a change to add is_active field in product table.
I believe you need to refer to the catalogue app when migrating:
python manage.py makemigrations catalogue