Merge pull request #35 from danieldupriest/create-custom-user
Create custom user
This commit is contained in:
		
						commit
						acc2a6ecc2
					
				
					 15 changed files with 183 additions and 61 deletions
				
			
		|  | @ -1,3 +1,12 @@ | |||
| from django.contrib import admin | ||||
| from .models import * | ||||
| 
 | ||||
| # Register your models here. | ||||
| admin.site.register(Report) | ||||
| admin.site.register(Section) | ||||
| admin.site.register(Field) | ||||
| admin.site.register(DataBool) | ||||
| admin.site.register(DataDecimal) | ||||
| admin.site.register(DataDate) | ||||
| admin.site.register(DataFile) | ||||
| admin.site.register(DataString) | ||||
| admin.site.register(DataInteger) | ||||
|  |  | |||
|  | @ -1,6 +1,5 @@ | |||
| # Generated by Django 2.1.4 on 2019-01-20 22:35 | ||||
| # Generated by Django 2.1.5 on 2019-01-23 00:38 | ||||
| 
 | ||||
| from django.conf import settings | ||||
| from django.db import migrations, models | ||||
| import django.db.models.deletion | ||||
| 
 | ||||
|  | @ -10,7 +9,6 @@ class Migration(migrations.Migration): | |||
|     initial = True | ||||
| 
 | ||||
|     dependencies = [ | ||||
|         migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||||
|     ] | ||||
| 
 | ||||
|     operations = [ | ||||
|  | @ -18,42 +16,42 @@ class Migration(migrations.Migration): | |||
|             name='DataBool', | ||||
|             fields=[ | ||||
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('data', models.BooleanField()), | ||||
|                 ('data', models.BooleanField(default=False)), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|             name='DataDate', | ||||
|             fields=[ | ||||
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('data', models.DateField()), | ||||
|                 ('data', models.DateField(blank=True, null=True)), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|             name='DataDecimal', | ||||
|             fields=[ | ||||
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('data', models.DecimalField(decimal_places=2, max_digits=9)), | ||||
|                 ('data', models.DecimalField(blank=True, decimal_places=2, max_digits=9, null=True)), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|             name='DataFile', | ||||
|             fields=[ | ||||
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('data', models.FileField(upload_to='')), | ||||
|                 ('data', models.FileField(blank=True, null=True, upload_to='')), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|             name='DataInteger', | ||||
|             fields=[ | ||||
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('data', models.IntegerField()), | ||||
|                 ('data', models.IntegerField(blank=True, null=True)), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|             name='DataString', | ||||
|             fields=[ | ||||
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('data', models.TextField()), | ||||
|                 ('data', models.TextField(default='')), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|  | @ -63,7 +61,7 @@ class Migration(migrations.Migration): | |||
|                 ('label', models.CharField(max_length=256)), | ||||
|                 ('number', models.IntegerField()), | ||||
|                 ('type', models.CharField(max_length=128)), | ||||
|                 ('completed', models.BooleanField()), | ||||
|                 ('completed', models.BooleanField(default=False)), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|  | @ -72,9 +70,8 @@ class Migration(migrations.Migration): | |||
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('title', models.CharField(max_length=128)), | ||||
|                 ('date_created', models.DateTimeField(verbose_name='date created')), | ||||
|                 ('date_submitted', models.DateTimeField(verbose_name='date submitted')), | ||||
|                 ('submitted', models.BooleanField()), | ||||
|                 ('user_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), | ||||
|                 ('date_submitted', models.DateTimeField(blank=True, null=True, verbose_name='date submitted')), | ||||
|                 ('submitted', models.BooleanField(default=False)), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|  | @ -88,39 +85,4 @@ class Migration(migrations.Migration): | |||
|                 ('report_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Report')), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='field', | ||||
|             name='section_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Section'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datastring', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datainteger', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datafile', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datadecimal', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datadate', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='databool', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|     ] | ||||
|  |  | |||
							
								
								
									
										58
									
								
								back/backend/migrations/0002_auto_20190123_0038.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								back/backend/migrations/0002_auto_20190123_0038.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,58 @@ | |||
| # Generated by Django 2.1.5 on 2019-01-23 00:38 | ||||
| 
 | ||||
| from django.conf import settings | ||||
| from django.db import migrations, models | ||||
| import django.db.models.deletion | ||||
| 
 | ||||
| 
 | ||||
| class Migration(migrations.Migration): | ||||
| 
 | ||||
|     initial = True | ||||
| 
 | ||||
|     dependencies = [ | ||||
|         migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||||
|         ('backend', '0001_initial'), | ||||
|     ] | ||||
| 
 | ||||
|     operations = [ | ||||
|         migrations.AddField( | ||||
|             model_name='report', | ||||
|             name='user_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='field', | ||||
|             name='section_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Section'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datastring', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datainteger', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datafile', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datadecimal', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='datadate', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|         migrations.AddField( | ||||
|             model_name='databool', | ||||
|             name='field_id', | ||||
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.Field'), | ||||
|         ), | ||||
|     ] | ||||
|  | @ -1,12 +1,12 @@ | |||
| from django.db import models | ||||
| from django.contrib.auth.models import User | ||||
| from django.conf import settings | ||||
| 
 | ||||
| class Report(models.Model): | ||||
|     user_id = models.ForeignKey(User, on_delete=models.CASCADE) | ||||
|     user_id = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) | ||||
|     title = models.CharField(max_length=128) | ||||
|     date_created = models.DateTimeField('date created') | ||||
|     date_submitted = models.DateTimeField('date submitted') | ||||
|     submitted = models.BooleanField() | ||||
|     date_submitted = models.DateTimeField('date submitted', null=True, blank=True) | ||||
|     submitted = models.BooleanField(default=False) | ||||
| 
 | ||||
| class Section(models.Model): | ||||
|     report_id = models.ForeignKey(Report, on_delete=models.CASCADE) | ||||
|  | @ -20,28 +20,28 @@ class Field(models.Model): | |||
|     label = models.CharField(max_length=256) | ||||
|     number = models.IntegerField() | ||||
|     type = models.CharField(max_length=128) | ||||
|     completed = models.BooleanField() | ||||
|     completed = models.BooleanField(default=False) | ||||
| 
 | ||||
| class DataBool(models.Model): | ||||
|     field_id = models.ForeignKey(Field, on_delete=models.CASCADE) | ||||
|     data = models.BooleanField() | ||||
|     data = models.BooleanField(default=False) | ||||
| 
 | ||||
| class DataDecimal(models.Model): | ||||
|     field_id = models.ForeignKey(Field, on_delete=models.CASCADE) | ||||
|     data = models.DecimalField(max_digits=9,decimal_places=2) | ||||
|     data = models.DecimalField(max_digits=9,decimal_places=2, null=True, blank=True) | ||||
| 
 | ||||
| class DataDate(models.Model): | ||||
|     field_id = models.ForeignKey(Field, on_delete=models.CASCADE) | ||||
|     data = models.DateField() | ||||
|     data = models.DateField(null=True, blank=True) | ||||
| 
 | ||||
| class DataFile(models.Model): | ||||
|     field_id = models.ForeignKey(Field, on_delete=models.CASCADE) | ||||
|     data = models.FileField() | ||||
| 
 | ||||
|     data = models.FileField(null=True, blank=True) | ||||
|      | ||||
| class DataString(models.Model): | ||||
|     field_id = models.ForeignKey(Field, on_delete=models.CASCADE) | ||||
|     data = models.TextField() | ||||
|     data = models.TextField(default='') | ||||
| 
 | ||||
| class DataInteger(models.Model): | ||||
|     field_id = models.ForeignKey(Field, on_delete=models.CASCADE) | ||||
|     data = models.IntegerField() | ||||
|     data = models.IntegerField(null=True, blank=True) | ||||
|  |  | |||
							
								
								
									
										
											BIN
										
									
								
								back/db.sqlite3
									
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								back/db.sqlite3
									
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -39,6 +39,7 @@ INSTALLED_APPS = [ | |||
|     'django.contrib.messages', | ||||
|     'django.contrib.staticfiles', | ||||
|     'backend', | ||||
|     'users', | ||||
|     'corsheaders', | ||||
| ] | ||||
| 
 | ||||
|  | @ -90,6 +91,9 @@ DATABASES = { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| # Authentication | ||||
| 
 | ||||
| AUTH_USER_MODEL = 'users.CustomUser' | ||||
| 
 | ||||
| # Password validation | ||||
| # https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators | ||||
|  |  | |||
							
								
								
									
										0
									
								
								back/users/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								back/users/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										13
									
								
								back/users/admin.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								back/users/admin.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| from django.contrib import admin | ||||
| from django.contrib.auth.admin import UserAdmin | ||||
| 
 | ||||
| from .forms import CustomUserCreationForm, CustomUserChangeForm | ||||
| from .models import CustomUser | ||||
| 
 | ||||
| class CustomUserAdmin(UserAdmin): | ||||
|     add_form = CustomUserCreationForm | ||||
|     form = CustomUserChangeForm | ||||
|     model = CustomUser | ||||
|     list_display = ['username', 'email', 'first_name', 'last_name'] | ||||
| 
 | ||||
| admin.site.register(CustomUser, CustomUserAdmin) | ||||
							
								
								
									
										5
									
								
								back/users/apps.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								back/users/apps.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| from django.apps import AppConfig | ||||
| 
 | ||||
| 
 | ||||
| class UsersConfig(AppConfig): | ||||
|     name = 'users' | ||||
							
								
								
									
										15
									
								
								back/users/forms.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								back/users/forms.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| from django import forms | ||||
| from django.contrib.auth.forms import UserCreationForm, UserChangeForm | ||||
| 
 | ||||
| from .models import CustomUser | ||||
| 
 | ||||
| class CustomUserCreationForm(UserCreationForm): | ||||
|     class Meta(UserCreationForm): | ||||
|         model = CustomUser | ||||
|         fields = UserCreationForm.Meta.fields + ('age',) | ||||
| 
 | ||||
| class CustomUserChangeForm(UserChangeForm): | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = CustomUser | ||||
|         fields = UserChangeForm.Meta.fields | ||||
							
								
								
									
										45
									
								
								back/users/migrations/0001_initial.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								back/users/migrations/0001_initial.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | |||
| # Generated by Django 2.1.5 on 2019-01-23 00:38 | ||||
| 
 | ||||
| import django.contrib.auth.models | ||||
| import django.contrib.auth.validators | ||||
| from django.db import migrations, models | ||||
| import django.utils.timezone | ||||
| 
 | ||||
| 
 | ||||
| class Migration(migrations.Migration): | ||||
| 
 | ||||
|     initial = True | ||||
| 
 | ||||
|     dependencies = [ | ||||
|         ('auth', '0009_alter_user_last_name_max_length'), | ||||
|     ] | ||||
| 
 | ||||
|     operations = [ | ||||
|         migrations.CreateModel( | ||||
|             name='CustomUser', | ||||
|             fields=[ | ||||
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('password', models.CharField(max_length=128, verbose_name='password')), | ||||
|                 ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), | ||||
|                 ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), | ||||
|                 ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), | ||||
|                 ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), | ||||
|                 ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), | ||||
|                 ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), | ||||
|                 ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), | ||||
|                 ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), | ||||
|                 ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), | ||||
|                 ('age', models.PositiveIntegerField(blank=True, null=True)), | ||||
|                 ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), | ||||
|                 ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), | ||||
|             ], | ||||
|             options={ | ||||
|                 'verbose_name': 'user', | ||||
|                 'verbose_name_plural': 'users', | ||||
|                 'abstract': False, | ||||
|             }, | ||||
|             managers=[ | ||||
|                 ('objects', django.contrib.auth.models.UserManager()), | ||||
|             ], | ||||
|         ), | ||||
|     ] | ||||
							
								
								
									
										0
									
								
								back/users/migrations/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								back/users/migrations/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										5
									
								
								back/users/models.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								back/users/models.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| from django.contrib.auth.models import AbstractUser | ||||
| from django.db import models | ||||
| 
 | ||||
| class CustomUser(AbstractUser): | ||||
|     age = models.PositiveIntegerField(null=True, blank=True) | ||||
							
								
								
									
										3
									
								
								back/users/tests.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								back/users/tests.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| from django.test import TestCase | ||||
| 
 | ||||
| # Create your tests here. | ||||
							
								
								
									
										3
									
								
								back/users/views.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								back/users/views.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| from django.shortcuts import render | ||||
| 
 | ||||
| # Create your views here. | ||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Logan Miller
						Logan Miller