diff --git a/cookbook/admin.py b/cookbook/admin.py index b1b09233c..8127f0ad9 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -2,19 +2,12 @@ from django.contrib import admin from .models import * -def get_user_name(user): - if (name := f"{user.first_name} {user.last_name}") == "": - return name - else: - return user.username - - class UserPreferenceAdmin(admin.ModelAdmin): list_display = ('name', 'theme', 'nav_color') @staticmethod def name(obj): - return get_user_name(obj.user) + return obj.user.get_user_name() admin.site.register(UserPreference, UserPreferenceAdmin) @@ -48,7 +41,7 @@ class RecipeAdmin(admin.ModelAdmin): @staticmethod def created_by(obj): - return get_user_name(obj.created_by) + return obj.created_by.get_user_name() admin.site.register(Recipe, RecipeAdmin) @@ -69,10 +62,10 @@ class CommentAdmin(admin.ModelAdmin): @staticmethod def name(obj): - return get_user_name(obj.created_by) + return obj.created_by.get_user_name() -admin.site.register(Comment) +admin.site.register(Comment, CommentAdmin) class RecipeImportAdmin(admin.ModelAdmin): @@ -83,11 +76,11 @@ admin.site.register(RecipeImport, RecipeImportAdmin) class RecipeBookAdmin(admin.ModelAdmin): - list_display = ('name', 'user') + list_display = ('name', 'user_name') @staticmethod - def user(obj): - return get_user_name(obj.user) + def user_name(obj): + return obj.user.get_user_name() admin.site.register(RecipeBook, RecipeBookAdmin) @@ -105,7 +98,7 @@ class MealPlanAdmin(admin.ModelAdmin): @staticmethod def user(obj): - return get_user_name(obj.user) + return obj.user.get_user_name() admin.site.register(MealPlan, MealPlanAdmin) diff --git a/cookbook/forms.py b/cookbook/forms.py index 55f0c09eb..1355bd9c0 100644 --- a/cookbook/forms.py +++ b/cookbook/forms.py @@ -27,6 +27,8 @@ class DateWidget(forms.DateInput): class UserPreferenceForm(forms.ModelForm): + prefix = 'preference' + class Meta: model = UserPreference fields = ('theme', 'nav_color') @@ -36,6 +38,18 @@ class UserPreferenceForm(forms.ModelForm): } +class UserNameForm(forms.ModelForm): + prefix = 'name' + + class Meta: + model = User + fields = ('first_name', 'last_name') + + help_texts = { + 'first_name': _('Both fields are optional. If none are given the username will be displayed instead') + } + + class ExternalRecipeForm(forms.ModelForm): file_path = forms.CharField(disabled=True, required=False) storage = forms.ModelChoiceField(queryset=Storage.objects.all(), disabled=True, required=False) diff --git a/cookbook/models.py b/cookbook/models.py index 58f1d6627..517194d44 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -1,10 +1,21 @@ import re +from django.contrib import auth from django.contrib.auth.models import User from django.utils.translation import gettext as _ from django.db import models +def get_user_name(self): + if not (name := f"{self.first_name} {self.last_name}") == " ": + return name + else: + return self.username + + +auth.models.User.add_to_class('get_user_name', get_user_name) + + def get_model_name(model): return ('_'.join(re.findall('[A-Z][^A-Z]*', model.__name__))).lower() diff --git a/cookbook/templates/base.html b/cookbook/templates/base.html index 0510c396d..0ba41c4df 100644 --- a/cookbook/templates/base.html +++ b/cookbook/templates/base.html @@ -137,7 +137,7 @@ {% if user.is_authenticated %}