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