Hi man,

Check 'class UserManager(): ......orgid = org_obj '




On Tue, Nov 26, 2019, 01:40 Ahmad Saki <[email protected]> wrote:

> My custom authentication model in django:
>
> from django.db import models
> from django.contrib.auth.models import (
> AbstractBaseUser, BaseUserManager
> )
> from organization.models import Organization
>
>
> class UserManager(BaseUserManager):
> # use_in_migrations = True
>
> # python manage.py createsuperuser
> def create_user(self, orgid, username, email,  password=None, is_admin=False, 
> is_staff=False, is_active=True):
>     if not orgid:
>         raise ValueError("Organization of user must not empty")
>     elif not username:
>         raise ValueError("User must have an username")
>     elif not email:
>         raise ValueError("User must have an email address")
>
>     org_obj = Organization.objects.all(orgid=orgid)
>     user_obj = self.model(
>         orgid=org_obj,
>         username=username,
>         email = self.normalize_email(email),
>         password=password
>         )
>     user_obj.set_password(password)
>     user_obj.admin=is_admin
>     user_obj.staff=is_staff
>     user_obj.active=is_active
>     user_obj.save(using=self._db)
>     return user_obj
>
> # python manage.py createsuperuser
> def create_superuser(self, orgid, username, email, password=None):
>     user = 
> self.create_user(orgid,username,email,password=password,is_admin=True,is_staff=True,is_active=True)
>     return user
>
> def create_staffuser(self, orgid, username, email, password=None):
>     user = 
> self.create_user(orgid,username,email,password=password,is_admin=False,is_staff=True,is_active=True)
>     return user
>
> class User(AbstractBaseUser):
> orgid       = models.ForeignKey(Organization, max_length=6, 
> on_delete=models.CASCADE)
> username    = models.CharField(primary_key=True, max_length=50)
> email       = models.EmailField(max_length=255, unique=True, null=False, 
> blank=False)
> admin       = models.BooleanField(default=False)
> staff       = models.BooleanField(default=False)
> active      = models.BooleanField(default=True)
> date_joined = models.DateTimeField(auto_now_add=True)
>
> objects = UserManager()
>
> USERNAME_FIELD = "username"
> # REQUIRED_FIELDS must contain all required fields on your User model,
> # but should not contain the USERNAME_FIELD or password as these fields will 
> always be prompted for.
> REQUIRED_FIELDS = ['orgid','email']
>
> class Meta:
>     app_label = "user"
>     db_table = "user"
>
> def __str__(self):
>     return self.username
>
> def get_full_name(self):
>     return self.username
>
> def get_short_name(self):
>     return self.username
>
> # this methods are require to login super user from admin panel
> def has_perm(self, perm, obj=None):
>     return self.is_staff
>
> # this methods are require to login super user from admin panel
> def has_module_perms(self, app_label):
>     return self.is_staff
>
> @property
> def is_admin(self):
>     return self.admin
>
> @property
> def is_staff(self):
>     return self.staff
>
> @property
> def is_active(self):
>     return self.active
>
>
>
> When I create migrations it creates:
>
> from django.db import migrations, models
> import django.db.models.deletion
> import user.models
>
>
> class Migration(migrations.Migration):
>
> initial = True
>
> dependencies = [
>     ('organization', '0001_initial'),
> ]
>
> operations = [
>     migrations.CreateModel(
>         name='User',
>         fields=[
>             ('password', models.CharField(max_length=128, 
> verbose_name='password')),
>             ('last_login', models.DateTimeField(blank=True, null=True, 
> verbose_name='last login')),
>             ('username', models.CharField(max_length=50, primary_key=True, 
> serialize=False)),
>             ('email', models.EmailField(max_length=255, unique=True)),
>             ('admin', models.BooleanField(default=False)),
>             ('staff', models.BooleanField(default=False)),
>             ('active', models.BooleanField(default=True)),
>             ('date_joined', models.DateTimeField(auto_now_add=True)),
>             ('orgid', models.ForeignKey(max_length=6, 
> on_delete=django.db.models.deletion.CASCADE, to='organization.Organization')),
>         ],
>         options={
>             'db_table': 'user',
>         },
>         managers=[
>             ('objects', user.models.UserManager()),
>         ],
>     ),
> ]
>
>
>
> But when I want to migrate it gives me an error below. Please help me
> anyone..
>
> Operations to perform:
>   Apply all migrations: admin, auth, contenttypes, organization, sessions, 
> user
> Running migrations:
>   Applying admin.0004_auto_20191118_2315...Traceback (most recent call last):
>   File "manage.py", line 21, in <module>
>     main()
>   File "manage.py", line 17, in main
>     execute_from_command_line(sys.argv)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\__init__.py",
>  line 381, in execute_from_command_line
>     utility.execute()
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\__init__.py",
>  line 375, in execute
>     self.fetch_command(subcommand).run_from_argv(self.argv)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py",
>  line 323, in run_from_argv
>     self.execute(*args, **cmd_options)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py",
>  line 364, in execute
>     output = self.handle(*args, **options)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py",
>  line 83, in wrapped
>     res = handle_func(*args, **kwargs)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\commands\migrate.py",
>  line 234, in handle
>     fake_initial=fake_initial,
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\executor.py",
>  line 117, in migrate
>     state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, 
> fake_initial=fake_initial)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\executor.py",
>  line 147, in _migrate_all_forwards
>     state = self.apply_migration(state, migration, fake=fake, 
> fake_initial=fake_initial)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\executor.py",
>  line 245, in apply_migration
>     state = migration.apply(state, schema_editor)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\migration.py",
>  line 124, in apply
>     operation.database_forwards(self.app_label, schema_editor, old_state, 
> project_state)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\operations\fields.py",
>  line 249, in database_forwards
>     schema_editor.alter_field(from_model, from_field, to_field)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\base\schema.py",
>  line 507, in alter_field
>     new_db_params = new_field.db_parameters(connection=self.connection)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\fields\related.py",
>  line 966, in db_parameters
>     return {"type": self.db_type(connection), "check": 
> self.db_check(connection)}
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\fields\related.py",
>  line 963, in db_type
>     return self.target_field.rel_db_type(connection=connection)
>   File 
> "C:\Users\ZAB-SAKI\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\fields\related.py",
>  line 878, in target_field
>     return self.foreign_related_fields[0]
> IndexError: tuple index out of range
>
>
>
> --
> 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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/7f038f19-7430-4d4b-8dc3-efad352d7bc8%40googlegroups.com
> <https://groups.google.com/d/msgid/django-users/7f038f19-7430-4d4b-8dc3-efad352d7bc8%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAP5HUWqEwunG5RYm_96d0J5TDNw3tTBAoXu97K652wq2aF%2B4Yw%40mail.gmail.com.

Reply via email to