1

我正在研究设计非常糟糕的遗留数据库。在某些表上,外键不仅可以为空(没关系),它们也可以为 0。

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

有没有办法让它在包含值 0 的外键上返回 None。

4

2 回答 2

0

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

于 2011-04-18T04:26:48.707 回答
0

面临同样的问题,所以最终写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]
于 2017-09-12T22:13:30.517 回答