diff --git a/accounts/migrations/0003_user_preferences.py b/accounts/migrations/0003_user_preferences.py new file mode 100644 index 0000000..505a3a2 --- /dev/null +++ b/accounts/migrations/0003_user_preferences.py @@ -0,0 +1,25 @@ +# Generated by Django 4.2.7 on 2023-11-29 02:51 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("preferences", "__first__"), + ("accounts", "0002_alter_user_table"), + ] + + operations = [ + migrations.AddField( + model_name="user", + name="preferences", + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="preferences.preferences", + ), + ), + ] diff --git a/accounts/models.py b/accounts/models.py index b756e6d..6f616bf 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -1,6 +1,7 @@ from django.contrib.auth.models import AbstractUser from django.utils.translation import gettext_lazy as _ - +from django.db import models +from preferences.models import Preferences class User(AbstractUser): class Meta: @@ -10,3 +11,8 @@ class Meta: def __str__(self): return self.username + + #store user preferences in a one to one mapping + preferences = models.OneToOneField(Preferences, on_delete=models.CASCADE, blank=True, null=True) + + diff --git a/core/settings.py b/core/settings.py index 894d1d4..62dd1e7 100644 --- a/core/settings.py +++ b/core/settings.py @@ -49,6 +49,7 @@ "homes", "residents", "work", + "preferences" ] CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" diff --git a/core/urls.py b/core/urls.py index 7324fd3..8695127 100644 --- a/core/urls.py +++ b/core/urls.py @@ -47,5 +47,9 @@ "work/", include("work.urls"), ), + path( + "preferences/", + include("preferences.urls"), + ), path("", TemplateView.as_view(template_name="home.html"), name="home"), ] diff --git a/preferences/forms.py b/preferences/forms.py new file mode 100644 index 0000000..d3be361 --- /dev/null +++ b/preferences/forms.py @@ -0,0 +1,14 @@ +from django import forms +from django.forms import ModelForm +from preferences.models import Preferences + +class PreferencesForm (ModelForm): + class Meta: + model = Preferences + fields = ('Language', 'Mode') + widgets = { + 'Language': forms.Select(attrs={'class': 'form-control'}), + 'Mode': forms.Select(attrs={'class': 'form-control'}), + } + labels = {'Language': 'Preferred Language', + 'Mode': 'Preferred Mode'} \ No newline at end of file diff --git a/preferences/models.py b/preferences/models.py new file mode 100644 index 0000000..49d5c6f --- /dev/null +++ b/preferences/models.py @@ -0,0 +1,15 @@ +from django.db import models + +def generate_lists (L): + result = [] + for elem in L: + result.append ((elem,elem)) + return result + +languages = ['English (en)', 'Suomi (fi)'] +viewModes = ['dark', 'light'] + +# for user preferences +class Preferences (models.Model): + Language = models.CharField (max_length = 30, blank=True, choices = generate_lists (languages)) + Mode = models.CharField (max_length = 30, blank=True, choices = generate_lists (viewModes)) \ No newline at end of file diff --git a/preferences/templates/preferences.html b/preferences/templates/preferences.html new file mode 100644 index 0000000..80866a1 --- /dev/null +++ b/preferences/templates/preferences.html @@ -0,0 +1,45 @@ +{% extends 'base.html' %} + +{% load i18n %} +{% load crispy_forms_tags %} + +{% block content %} +