подклассификация типа поля peewee для добавления поведения - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь добавить требуемое поведение в CharFiled или TextField, чтобы я мог сохранить список списков и снова получить его в виде списка списков. Я не спрашиваю о решении, а хотел бы увидеть пример, где делается подкласс уже поддерживаемого типа поля, поскольку я не нашел ни одного в документации или в Интернете.

Должен ли я сделать это, как описано в документах, для создания пользовательского типа?

например:

class mylistoflists(TextField):

если да, то что я должен присвоить field_type?

1 Ответ

0 голосов
/ 14 мая 2018

Пример кода (полный пример см. В файле tests / fields.py):

class ListField(TextField):
    def db_value(self, value):
        return ','.join(value) if value else ''

    def python_value(self, value):
        return value.split(',') if value else []


class Todo(TestModel):
    content = TextField()
    tags = ListField()


class TestCustomField(ModelTestCase):
    requires = [Todo]

    def test_custom_field(self):
        t1 = Todo.create(content='t1', tags=['t1-a', 't1-b'])
        t2 = Todo.create(content='t2', tags=[])

        t1_db = Todo.get(Todo.id == t1.id)
        self.assertEqual(t1_db.tags, ['t1-a', 't1-b'])

        t2_db = Todo.get(Todo.id == t2.id)
        self.assertEqual(t2_db.tags, [])

        t1_db = Todo.get(Todo.tags == Value(['t1-a', 't1-b'], unpack=False))
        self.assertEqual(t1_db.id, t1.id)
...