class ApprovedStateField(forms.fields.Field): widget = forms.CheckboxInput def clean(self, value): super(ApprovedStateField, self).clean(value) if bool(value): return datetime.datetime.now() else: return None class Keyword(models.Model): name = models.CharField(maxlength=30) approved_at = ApprovedStateField() def __setattr__(self, name, value): # don't change the approved_at attribute if it is already set if (name <> "approved_at") or (not hasattr(self, 'approved_at')) or (self.approved_at is None): super(Keyword, self).__setattr__(name, value)