class BaseSifrelenmisDateField(BaseSifrelenmisField):
   

    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = self.max_raw_length
        super(BaseSifrelenmisDateField, self).__init__(*args, **kwargs)

    def getir_ic_kulanilan(self):
        return 'CharField'

    def formfield(self, **kwargs):
        defaults = {'widget': self.form_widget}
        defaults.update(kwargs)
        return super(BaseSifrelenmisDateField, self).formfield(**defaults)

    def to_python(self, value):
        if isinstance(value, self.date_class):
            date_value = value
        else:
            date_text = super(BaseSifrelenmisDateField, self).to_python(value)
            date_value = self.date_class(*map(int, date_text.split(':')))
        return date_value

    # def get_prep_value(self, value):
    def getir_db_ve_hazirla(self, value):
      
        date_text = value.strftime(self.save_format)
        return super(BaseSifrelenmisDateField, self).getir_db_ve_hazirla(date_text)


class SifrelenmisDateField(BaseSifrelenmisDateField):
    __metaclass__ = models.SubfieldBase
    form_widget = forms.DateInput
    save_format = "%Y:%m:%d"
    date_class = datetime.date
    max_raw_length = 10 # YYYY:MM:DD


class SifrelenmisDateTimeField(BaseSifrelenmisDateField):
    __metaclass__ = models.SubfieldBase
    form_widget = forms.DateTimeInput
    save_format = "%Y:%m:%d:%H:%M:%S:%f"
    date_class = datetime.datetime
    max_raw_length = 26 # YYYY:MM:DD:hh:mm:ss:micros


class BaseSifrelenmisNumberField(BaseSifrelenmisField):
 
    def __init__(self, *args, **kwargs):
        if self.max_raw_length:
            kwargs['max_length'] = self.max_raw_length
        super(BaseSifrelenmisNumberField, self).__init__(*args, **kwargs)

    def getir_ic_kulanilan(self):
        return 'CharField'

    def to_python(self, value):
        if isinstance(value, self.number_type):
            number = value
        else:
            number_text = super(BaseSifrelenmisNumberField, self).to_python(value)
            number = self.number_type(number_text)
        return number

    # def get_prep_value(self, value):
    def getir_db_ve_hazirla(self, value):
        number_text = self.format_string % value
        return super(BaseSifrelenmisNumberField, self).getir_db_ve_hazirla(number_text)


class SifrelenmisIntField(BaseSifrelenmisNumberField):
    __metaclass__ = models.SubfieldBase
    max_raw_length = len(str(-sys.maxint - 1))
    number_type = int
    format_string = "%d"


class SifrelenmisLongField(BaseSifrelenmisNumberField):
    __metaclass__ = models.SubfieldBase
    max_raw_length = None # no limit
    number_type = long
    format_string = "%d"

    def getir_ic_kulanilan(self):
        return 'TextField'


class SifrelenmisFloatField(BaseSifrelenmisNumberField):
    __metaclass__ = models.SubfieldBase
    max_raw_length = 150
    number_type = float

    format_string = "%0.66f"


class PickleField(models.TextField):
    __metaclass__ = models.SubfieldBase

    editable = False
    serialize = False

    def getir_db_ve_hazirla(self, value):
        return pickle.dumps(value)

    def to_python(self, value):
        if not isinstance(value, basestring):
            return value

        try:
            return pickle.loads(smart_str(value))
      
        except ValueError:
            return value
ile kodlarinizi sifreyebilirsiniz.kirlmasi imakansiza yakin