diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index 5be02db..e830318 100644 Binary files a/config/__pycache__/settings.cpython-311.pyc and b/config/__pycache__/settings.cpython-311.pyc differ diff --git a/config/settings.py b/config/settings.py index 291d043..a9f371c 100644 --- a/config/settings.py +++ b/config/settings.py @@ -180,3 +180,5 @@ if EMAIL_USE_SSL: # https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +AUTH_USER_MODEL = "core.User" diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 9aa598b..d439abd 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..debde3d --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,69 @@ +# Generated by Django 5.2.7 on 2025-11-27 13:51 + +import django.contrib.auth.models +import django.contrib.auth.validators +import django.db.models.deletion +import django.utils.timezone +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.BigAutoField(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=150, 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')), + ('user_type', models.CharField(choices=[('student', 'Student'), ('teacher', 'Teacher'), ('client', 'Client'), ('admin', 'Admin')], default='student', max_length=10)), + ('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()), + ], + ), + migrations.CreateModel( + name='Client', + fields=[ + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)), + ('company_name', models.CharField(blank=True, max_length=255)), + ], + ), + migrations.CreateModel( + name='Student', + fields=[ + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Teacher', + fields=[ + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)), + ('skills', models.TextField(blank=True)), + ('hourly_rate', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)), + ('daily_rate', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)), + ], + ), + ] diff --git a/core/migrations/__pycache__/0001_initial.cpython-311.pyc b/core/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000..6a6277d Binary files /dev/null and b/core/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index 71a8362..a89242b 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,33 @@ +from django.contrib.auth.models import AbstractUser from django.db import models -# Create your models here. +class User(AbstractUser): + USER_TYPE_CHOICES = ( + ("student", "Student"), + ("teacher", "Teacher"), + ("client", "Client"), + ("admin", "Admin"), + ) + user_type = models.CharField(max_length=10, choices=USER_TYPE_CHOICES, default="student") + +class Student(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) + + def __str__(self): + return self.user.username + +class Teacher(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) + skills = models.TextField(blank=True) + hourly_rate = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True) + daily_rate = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True) + + def __str__(self): + return self.user.username + +class Client(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) + company_name = models.CharField(max_length=255, blank=True) + + def __str__(self): + return self.user.username \ No newline at end of file