Нулевое значение Джанго на поле ForeignKey - PullRequest
1 голос
/ 18 апреля 2011

Я работаю над очень плохо спроектированной устаревшей базой данных. В некоторых таблицах внешние ключи могут быть не только нулевыми (что нормально), но и 0.

Я сопоставил одну из этих таблиц с моделью, она возвращает желаемое значение None, если в таблице указано значение Null, но вызывает исключение, когда значение равно 0.

Есть ли способ заставить его возвращать None для внешних ключей, содержащих значение 0.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2017

Столкнулся с той же проблемой, поэтому в конечном итоге написать ForeignKey подкласс:

class LegacyForeignKey(models.ForeignKey):
    """
    ForeignKey for legacy databases where foreign keys columns
    are non-nullable and using zero values as NULL.

    class Order(models.Model):
        carrier = LegacyForeignKey('Carrier', null=True)
        class Meta:
           managed = False
           db_table = "ps_order"

    order.carrier_id = 0
    order.carrier  # no Carrier.DoesNotExist exception
    """

    def get_local_related_value(self, instance):
        ret = super().get_local_related_value(instance)
        return [None if item == 0 else item for item in ret]
0 голосов
/ 18 апреля 2011

Вы должны будете создать свое собственное ForeignKey -подобное поле, которое не захлебнется 0. Обратите внимание, что любое не NULL значение может быть действительным, поэтому ваши данные здесь неверны, и вам следует рассмотреть возможность их восстановления.

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