如何解决Django - OneToOneField 上的参照完整性
我正在尝试将产品提要 (Product
) 导入 Django。我需要维护一组选定的产品 (SelectedProduct
),其中还包含产品描述的覆盖。我认为表示这一点的最佳方式是将 OneToOneField
与 SelectedProduct
联系起来的 Product
。
class Product(models.Model):
sku = models.CharField(max_length=32,primary_key=True)
title = models.CharField(max_length=200)
description = models.TextField(max_length=2000,blank=True,null=True)
class SelectedProduct(models.Model):
product = models.OneToOneField(Product,db_column='product_sku',on_delete=models.DO_NOTHING)
description = models.TextField(max_length=2000,null=True)
为简单起见,每次读取产品提要时,我打算删除所有产品并重新导入整个产品提要(在事务中,因此我可以在需要时回滚)。
但是,我不想同时截断 SelectedProduct
,因为它包含已被覆盖的描述。我希望 models.DO_NOTHING
可能会有所帮助,但它没有。
我想我要么需要在导入提要时暂时禁用参照完整性(并从 SelectedProduct
中删除任何会破坏完整性的条目),要么需要以不同的方式表示关系。
任何建议,请:-)
注意 - 以上是一个简化的表示。我也有产品的变体,并且会选择覆盖变体价格的变体。
解决方法
为了记录,我采纳了@TimNyborg 的建议,使用 update_or_create
。数据加载现在大约需要 10 倍的时间,但由于它是小规模数据集的批量导入,因此性能不是问题,总体而言感觉是一个更好的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。