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)