TheNone
TheNone

Reputation: 5802

Disable django form field for a given time

I want to disable django fields for 6 months after the date of update. I have saved update_time to a table.

updated_time = a.update_time
disabled_time = a.update_time + timedelta(180)

I want to diable field that updated:

self.fields['first_name'].widget.attrs['readonly'] = True

How can I disable self.fields['first_name'].widget.attrs['readonly'] = True for disabled_time?

Thanks in advance

Upvotes: 1

Views: 447

Answers (1)

mike_k
mike_k

Reputation: 1841

You can compare, and substract basic datetime objects and make some check at form initialization time:

from datetime import timedelta, datetime
...
class FooForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(FooForm, self).__init__(*args, **kwargs)
        # check if we already have a saved object and it's not older than 180 days
        if self.instance.pk and
                (datetime.now() - self.instance.update_time) < timedelta(180):
            self.fields['first_name'].widget.attrs['readonly'] = True

    class Meta:
        model = Foo

(Not really tested but should work as it is.) Also note, that it is often convenient to keep update_time with auto_now set to True.

Upvotes: 1

Related Questions