I now sort of do what you proposed. I override the init. But for the attributes that I want to keep track of I create create a property. Then it's a matter of counting how often it has been accessed. Now I just need inherit from both Model and DateTimeFieldHelper :)
----------------------------------- _magic_dt_create_counter = {} class DateTimeFieldHelper(object): def __init__(self, *args, **kwargs): global _magic_dt_create_counter #print "init me!" self._magic_dt_fields = {} super(DateTimeFieldHelper, self).__init__(*args, **kwargs) c = str(self.__class__) if c not in _magic_dt_create_counter: #print "Enhanceing %s", c _magic_dt_create_counter[c] = 1 opts = self._meta for f in opts.fields: if isinstance(f, DateTimeField): exec "DateTimeFieldHelper.%s = property(partial(_get_magic_dt_field, dt_field=f.attname), partial(_set_magic_dt_field, dt_field=f.attname))" % f.attname # when supplied via kwargs, set to 1.. opts = self._meta for f in opts.fields: if isinstance(f, DateTimeField): if f.attname in kwargs: self._magic_dt_fields[f.attname] = (kwargs[f.attname] ,1) def _get_magic_dt_field(self, dt_field): #print "get field: %s" %dt_field return self._magic_dt_fields[dt_field][0] if dt_field in self._magic_dt_fields else None def _set_magic_dt_field(self, val, *args, **kwargs): dt_field = kwargs["dt_field"] #print "set field: %s" %dt_field if dt_field in self._magic_dt_fields: count = self._magic_dt_fields[dt_field][1] + 1 #print "%s has been set %s times now to %s" % (dt_field,count,val) else: count = 0 self._magic_dt_fields[dt_field] = [val , count] ----------------------------------- This is my new DateTimeField: ----------------------------------- class DateTimeField(DateTimeField): def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, auto_override=False, **kwargs): self.auto_now, self.auto_now_add, self.auto_override = auto_now, auto_now_add, auto_override if (auto_now or auto_now_add) and not auto_override: kwargs['editable'] = False kwargs['blank'] = True Field.__init__(self, verbose_name, name, **kwargs) def pre_save(self, model_instance, add): if (not self.auto_override) and (self.auto_now or (self.auto_now_add and add)): value = datetime.datetime.now() elif self.auto_override and (self.auto_now): # somehow set currenttime if no time has explicitly been set # the somehow has been solved... be scared, very hackish if self.attname in model_instance._magic_dt_fields and model_instance._magic_dt_fields[self.attname][1] >= 1: # value has been explicitly set #print "Value for %s has been set %s time" % (self.attname, model_instance._magic_dt_fields[self.attname][1]) value = super(DateField, self).pre_save(model_instance, add) else: # no value is set, use now value = datetime.datetime.now() else: value = super(DateField, self).pre_save(model_instance, add) setattr(model_instance, self.attname, value) return value ----------------------------------- It all is very hackish, simply forcing myself to set the correct date on an update would have been simpler :) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---