我正在设计非常糟糕的遗留数据库。在某些表上,不仅外键可以为空(这是可以的),它们也可以是0。Django在外键字段上的零值
我映射这些表返回所需的无值时,它是表空模型之一,但如果值是0
抛出一个异常有没有办法让它在返回None包含值为0的外键。
我正在设计非常糟糕的遗留数据库。在某些表上,不仅外键可以为空(这是可以的),它们也可以是0。Django在外键字段上的零值
我映射这些表返回所需的无值时,它是表空模型之一,但如果值是0
抛出一个异常有没有办法让它在返回None包含值为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]
您可以添加是给你头痛的查询和模式? – fceruti 2011-04-18 04:46:28
这真的是一个普遍的问题,看起来可能没有答案。 – Siavash 2011-04-18 09:42:48