我正在设计设计非常糟糕的旧数据库。在某些表中,外键不仅可以为空(可以),它们也可以为0。
我将其中一个表映射到Model,当它在表中为Null时返回所需的None值,但在值为0时引发异常。
有没有办法让它在包含值0的外键上返回None。
答案 0 :(得分:0)
您必须创建自己的ForeignKey
字段,而不会在0
上阻塞。请注意,任何非NULL
值可能有效,因此您的数据在此处出错,您应该考虑修复它。
答案 1 :(得分: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]