Джанго BooleanField принимает значения - PullRequest
0 голосов
/ 30 мая 2011

У меня есть база данных MySQL, куда данные переносятся из базы данных Access. Проблема в том, что доступ сохраняет логическое значение true как -1, тогда как django сохраняет логическое значение true как 1 (как обычно происходит с MySQL).

Таким образом, для логических полей старые значения true сохраняются как -1, а новые значения true сохраняются как 1.

Мне нужно сказать django, чтобы рассматривать True как 1 и -1 для всех логических полей. Как я могу это сделать?

Заранее спасибо, Сабрина

Ответы [ 3 ]

1 голос
/ 30 мая 2011

Просто обновите все старые значения до 1:

UPDATE <table>
SET <fieldname>=1
WHERE <fieldname>=-1
0 голосов
/ 10 октября 2011

Создайте собственный класс BooleanField, который расширяется от моделей. BooleanField.В следующем классе истинные значения сохраняются с -1 в БД.

class AccessCompatibleBooleanField(models.BooleanField):

    def to_python(self, value):
        if value == True:
            return -1
        if value == False:
            return False
        if value in ('t', 'True', '1', '-1'):
            return -1
        if value in ('f', 'False', '0'):
            return False
        raise exceptions.ValidationError(self.error_messages['invalid'])

Если вы хотите сделать фильтры, такие как .filter (visibles = True) и visibles, это пользовательское логическое поле, вы должны добавить следующий методв ваш пользовательский класс.

    def get_prep_value(self, value):
        if value is None:
            return None
        b = bool(value)
        if b:
            return -1
        return b
0 голосов
/ 31 мая 2011

Я понятия не имею, что такое Django, но если вы выполнили все свои логические тесты с NOT FALSE (или <> 0) вместо TRUE, он будет работать независимо от фактического значения, закодированного для TRUE (-1или 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...