Django的ForeignKey字段值为零



我正在处理设计非常糟糕的遗留数据库。在某些表上,外键不仅可以为空(这是可以的),它们也可以为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]

相关内容

  • 没有找到相关文章

最新更新