refactor: 💬user settings are incorporated into the user model
This commit is contained in:
parent
57138943b5
commit
2ac46c9618
6 changed files with 45 additions and 34 deletions
|
|
@ -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")}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
30
moku/migrations/0011_user_language_delete_usersettings.py
Normal file
30
moku/migrations/0011_user_language_delete_usersettings.py
Normal 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',
|
||||
),
|
||||
]
|
||||
|
|
@ -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"]
|
||||
|
|
|
|||
|
|
@ -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?"),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Reference in a new issue