ФорумПрограммированиеPythonDjango → Расширение models.*Field

Расширение models.*Field

  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 20 апреля 2012 г. 12:47

    Есть такое:


    class Mo(models.Model):    
       column = models.IntegerField()

    obj = Mo()
    print obj.column # число


    Хочу такое:

    class MyField(models.IntegerField):
       # переопределить какие-то методы

    class Mo(models.Model):    
       column = MyField()

    obj = Mo()
    obj.column # здесь не число, а объект нужного мне класса


    Такое возможно? Что делать? Идеология это допускает?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 20 апреля 2012 г. 15:02, спустя 2 часа 14 минут 21 секунду

    https://docs.djangoproject.com/en/dev/howto/custom-model-fields/
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 20 апреля 2012 г. 16:11, спустя 1 час 9 минут 3 секунды

    adw0rd, :-*
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 апреля 2012 г. 18:39, спустя 2 часа 28 минут 20 секунд

    NOOB!
    Спустя 6 сек.
    :D
    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 20 апреля 2012 г. 18:58, спустя 18 минут 37 секунд

    для остальных нубов:


    class MyField(models.IntegerField):

    __metaclass__ = models.SubfieldBase

    def to_python(self, value):
    return Class(value)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 апреля 2012 г. 19:07, спустя 9 минут 7 секунд

    vasa_c, боян :D
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 20 апреля 2012 г. 19:10, спустя 3 минуты 4 секунды

    я нихуя ваще не понимаю в этом вашем наречии(
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 20 апреля 2012 г. 19:15, спустя 5 минут 31 секунду

    да ну, все интуитивно понятно
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 20 апреля 2012 г. 20:07, спустя 51 минуту 59 секунд

    Вот например JSONField:




    class JSONField(models.TextField):
    """JSONField is a generic textfield that serializes/unserializes JSON objects"""

    # Used so to_python() is called
    __metaclass__ = models.SubfieldBase

    def __init__(self, *args, **kwargs):
    self.dump_kwargs = kwargs.pop('dump_kwargs', {'cls': DjangoJSONEncoder})
    self.load_kwargs = kwargs.pop('load_kwargs', {})

    super(JSONField, self).__init__(*args, **kwargs)

    def to_python(self, value):
    """Convert string value to JSON"""
    if isinstance(value, basestring):
    try:
    return json.loads(value, **self.load_kwargs)
    except ValueError:
    pass
    return value

    def get_db_prep_value(self, value, connection, prepared=False):
    """Convert JSON object to a string"""

    if isinstance(value, basestring):
    return value
    return json.dumps(value, **self.dump_kwargs)

    def value_to_string(self, obj):
    value = self._get_val_from_obj(obj)
    return self.get_db_prep_value(value)

    def value_from_object(self, obj):
    return json.dumps(super(JSONField, self).value_from_object(obj))

    def formfield(self, **kwargs):

    if "form_class" not in kwargs:
    kwargs["form_class"] = JSONFormField

    field = super(JSONField, self).formfield(**kwargs)

    if not field.help_text:
    field.help_text = "Enter valid JSON"

    return field

    Спустя 27 сек.
    http://pypi.python.org/pypi/django-jsonfield
    https://smappi.org/ - платформа по созданию API на все случаи жизни

Пожалуйста, авторизуйтесь, чтобы написать комментарий!