При реализации пользовательского поля Django, вы должны включить эту строку:В настраиваемом поле django, что делает метаклассы SubfieldBase?
__metaclass__ = models.SubfieldBase
в определении класса, как в:
class SomeCustomField(models.Field):
__metaclass__ = models.SubfieldBase
Что это на самом деле?
Update:
Это исходный код для метакласса (от проекта Django):
class SubfieldBase(type):
"""
A metaclass for custom Field subclasses. This ensures the model's attribute
has the descriptor protocol attached to it.
"""
def __new__(cls, name, bases, attrs):
new_class = super(SubfieldBase, cls).__new__(cls, name, bases, attrs)
new_class.contribute_to_class = make_contrib(
new_class, attrs.get('contribute_to_class')
)
return new_class
Как это причина to_python называться? И что будет иначе?
Хорошо, так что ответ определенно просто: прекратите использовать django 1.7 и переключитесь на 1.8! :) thanks – Brendan
Примечание. Если ваш пользовательский класс Field имеет дело с структурами данных, которые являются более сложными, чем строки, даты, целые числа или float, вам может потребоваться переопределить 'from_db_value()' и 'to_python()'. –
Если, однако, вы хотите проверить назначение, то в Django 1.8 вам нужно будет реализовать его самостоятельно. – Suor