linkding icon indicating copy to clipboard operation
linkding copied to clipboard

Add timezone option to UserProfile model

Open trey opened this issue 9 months ago • 0 comments

It would be nice to be able to set your preferred timezone in the settings page. I wouldn't have noticed its absence without the nice, new View bookmark modal!

I implemented a timezone picker in Cassette Nest (also a Django app) something like this:

⭐ Install pytz

⭐ Add some things to settings.py:

from pytz import common_timezones

# ... other stuff

MIDDLEWARE = [
    "your_app.middleware.TimezoneMiddleware",
]

# ... other stuff

TIME_ZONES = [(tz, tz) for tz in common_timezones]

⭐ Create the timezone middleware:

import pytz
from django.utils import timezone
from django.conf import settings

class TimezoneMiddleware:
    """
    Automatically set the timezone to what's set on the User's profile.
    """

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.user.is_authenticated:
            try:
                tzname = request.user.profile.timezone
                if tzname:
                    timezone.activate(pytz.timezone(tzname))
                else:
                    timezone.activate(pytz.timezone(settings.TIME_ZONE))
            except Profile.DoesNotExist:
                timezone.activate(pytz.timezone(settings.TIME_ZONE))
        else:
            timezone.deactivate()

        return self.get_response(request)

⭐ Add this to my profile model:

from django.conf import settings

# other stuff ...

timezone = models.CharField(
    max_length=40,
    blank=True,
    choices=settings.TIME_ZONES,
    default=settings.TIME_ZONE,
)

⭐ And add the field to the ModelForm.

I'd be happy to help implement this if you want it done! 😄

I should note that my user profile model is just called Profile, but that's a minor difference.

trey avatar May 03 '24 21:05 trey