外键字段上的Django零值

外键字段上的Django零值,django,legacy-database,Django,Legacy Database,我正在处理设计非常糟糕的遗留数据库。在某些表上,外键不仅可以为null(这是可以的),还可以为0 我将其中一个表映射到一个模型,当它在表中为Null时返回所需的None值,但当该值为0时引发异常 有没有一种方法可以使它在包含值0的外键上返回None。您必须创建自己的ForeignKey-类似于字段的字段,它不会阻塞0。请注意,任何非NULL值都可能是有效的,因此您的数据在这里是错误的,您应该考虑修复它。面临同样的问题,因此最后编写ForeignKey子类: class LegacyForeign

我正在处理设计非常糟糕的遗留数据库。在某些表上,外键不仅可以为null(这是可以的),还可以为0

我将其中一个表映射到一个模型,当它在表中为Null时返回所需的None值,但当该值为0时引发异常


有没有一种方法可以使它在包含值0的外键上返回None。

您必须创建自己的
ForeignKey
-类似于字段的字段,它不会阻塞
0
。请注意,任何非
NULL
值都可能是有效的,因此您的数据在这里是错误的,您应该考虑修复它。

面临同样的问题,因此最后编写
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]

无法修复它是一个非常旧的数据库在FK表中添加PK为0的行是一个选项??您可以添加让您头疼的查询和模型吗?这确实是一个一般性的问题,从外观上看可能没有答案。