I got a way to do these, however a little magic because the logic in
django.db.models.manipulators.ManipulatorDescriptor.__get__ :
...
 bases = [self.base]
                if hasattr(model, 'Manipulator'): # here we have a
chance to add something to the auto-manipulator.
                    bases = [model.Manipulator] + bases
                self.man = types.ClassType(self.name, tuple(bases), {})
                self.man._prepare(model)
...
So I use the model.Manipulator field to add something to the default
automatic manipulator:


class CustomAutomaticManipulator(object):
    def __init__(self, id=None):
        if self.__class__.change:  # call from model.ChangeManipulator
            AutomaticChangeManipulator.__init__(self, obj_key=id,
follow=None)
        else: # call from model.AddManipulator
            AutomaticAddManipulator.__init__(self)

    def add_validators(self, field_name, validator_list):
        """ add extra validator_list to field"""
        try:
            field = [i for i in self.fields if i.field_name ==
field_name][0]
        except IndexError:
            raise NameError, 'no field named %' %field_name
        field.validator_list.extend(validator_list)


class CategoryManipulator(CustomAutomaticManipulator):
    def __init__(self, id=None):
        CustomAutomaticManipulator.__init__(self, id)
        self.add_validators('title_en', [self.validate_parent])

    def validate_parent(self, field_data, all_data):
        raise ValidationError('Your parent is error.')

class Category(models.Model):
        Manipulator = CategoryManipulator # magic Manipulator

it worked but I don't think is a perfect way to do these, because
model.Manipulator is not documented. it belong to implemention rather
than a interface exported to public.

another way is to replace the default auto manipulator to ourselves.
but I don't find a good way to do these, I have to write a __meta__
field in our models class and call my parent's __meta__.__init__ and
replace the auto manipulator to oursevles.

any suggestion about the manipulator framework?


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to