refactor: 💬user settings are incorporated into the user model

This commit is contained in:
m5ka 2024-03-27 16:52:06 +00:00
parent 57138943b5
commit 2ac46c9618
6 changed files with 45 additions and 34 deletions

View file

@ -3,7 +3,7 @@ from django.contrib.auth.forms import UserCreationForm
from django.utils.translation import gettext_lazy as _
from django_recaptcha.fields import ReCaptchaField
from moku.models.user import User, UserSettings
from moku.models.user import User
class UserForm(UserCreationForm):
@ -35,7 +35,7 @@ class UserSettingsForm(forms.ModelForm):
"""Form for creating or updating user settings."""
class Meta:
model = UserSettings
model = User
fields = ("language",)
labels = {"language": _("language")}

View file

@ -8,6 +8,6 @@ class MokuLanguageMiddleware:
self.get_response = get_response
def __call__(self, request):
if request.user.is_authenticated and hasattr(request.user, "settings"):
translation.activate(request.user.settings.language)
if request.user.is_authenticated:
translation.activate(request.user.language)
return self.get_response(request)

View file

@ -0,0 +1,30 @@
# Generated by Django 5.0.3 on 2024-03-27 16:23
from django.db import migrations, models
def migrate_language_setting(apps, schema_editor):
User = apps.get_model("moku", "User")
for user in User.objects.all():
if hasattr(user, "settings"):
user.language = user.settings.language
user.save()
class Migration(migrations.Migration):
dependencies = [
('moku', '0010_alter_recipe_title'),
]
operations = [
migrations.AddField(
model_name='user',
name='language',
field=models.CharField(choices=[('en', 'english'), ('lio', 'lami lioa'), ('tok', 'toki pona')], default='en', help_text='what language do you want to use moku.blog in?', max_length=16, verbose_name='language'),
),
migrations.RunPython(migrate_language_setting, reverse_code=migrations.RunPython.noop),
migrations.DeleteModel(
name='UserSettings',
),
]

View file

@ -1,6 +1,6 @@
from moku.models.blog import BlogPost
from moku.models.post import Post
from moku.models.recipe import Recipe, RecipeStep
from moku.models.user import User, UserSettings
from moku.models.user import User
__all__ = ["BlogPost", "Post", "Recipe", "RecipeStep", "User", "UserSettings"]
__all__ = ["BlogPost", "Post", "Recipe", "RecipeStep", "User"]

View file

@ -60,6 +60,13 @@ class User(AbstractUser):
upload_to=user_avatar_filename,
help_text=_("a little picture to show up on your profile."),
)
language = models.CharField(
verbose_name=_("language"),
max_length=16,
choices=settings.LANGUAGES,
default="en",
help_text=_("what language do you want to use moku.blog in?"),
)
last_seen_at = models.DateTimeField(
verbose_name=_("last seen at"),
blank=True,
@ -85,18 +92,3 @@ class User(AbstractUser):
if not self.bio:
return ""
return full_markdown(self.bio)
class UserSettings(models.Model):
"""Represents settings for a single user."""
user = models.OneToOneField(
"User", related_name="settings", on_delete=models.CASCADE
)
language = models.CharField(
verbose_name=_("language"),
max_length=16,
choices=settings.LANGUAGES,
default="en",
help_text=_("what language do you want to use moku.blog in?"),
)

View file

@ -45,23 +45,12 @@ class EditSettingsView(LoginRequiredMixin, FormView):
page_title = _("settings")
def form_valid(self, form):
form.instance.user = self.request.user
try:
form.save()
except IntegrityError:
messages.error(
self.request, _("uh oh. i think something went a little bit oopsie.")
)
return self.form_invalid(form)
messages.success(self.request, _("settings updated!"))
return redirect("settings")
def get_form(self):
if hasattr(self.request.user, "settings"):
return self.form_class(
instance=self.request.user.settings, **self.get_form_kwargs()
)
return super().get_form()
return self.form_class(instance=self.request.user, **self.get_form_kwargs())
class ProfileView(View):