Custom Field в Django
Изучаю джанго и нашел пример в документации как можно создать собственное поле для модели. Проблема в том, что данный пример не работает(вылетает глупая ошибка nonetype object has no attribute 'north'). Все бы ничего, но с учетом того, что я только изучаю данный фреймворк, я не могу понять, в чем проблема(вылетает в методе get_prep_value()). Код приведен ниже:
def parse_hand(hand_string):
p1 = re.compile('.{26}')
p2 = re.compile('..')
args = [p2.findall(x) for x in p1.findall(hand_string)]
if len(args) != 4:
raise ValidationError(_("Invalid input for a Hand instance"))
return Hand(*args)
class Hand:
def __init__(self, north, east, south, west):
self.north = north
self.east = east
self.south = south
self.west = west
def __str__(self):
return self.north
class HandField(models.Field):
description = 'A hand of cards'
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 104
super().__init__(*args, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
del kwargs["max_length"]
return name, path, args, kwargs
def from_db_value(self, value, expression, connection):
if value is None:
return value
return parse_hand(value)
def to_python(self, value):
if isinstance(value, Hand):
return value
if value is None:
return value
return parse_hand(value)
#вот тут ошибка
def get_prep_value(self, value):
return ''.join([''.join(l) for l in (value.north,
value.east, value.south, value.west)])
Модель:
class MyModel(models.Model):
hand = HandField(blank=True, null=True)
name = models.CharField(max_length=255)
count = models.IntegerField(blank=True, null=True)