【发布时间】:2021-05-17 17:25:16
【问题描述】:
我有两个班级,我正在尝试尽可能有效地将一个字段从一个字段移动到另一个字段。数据库很大,所以如果我们可以在 Django 中使用 SQL Update query 或直接 SQL 查询,那将是理想的选择。我的数据库是 PostgreSQL。
Class Order(models.Model):
name = models.TextField(null=True, blank=True)
address = models.ForeignKey(Address, on_delete=models.PROTECT)
Class Address(models.Model):
name = models.TextField(null=True, blank=True)
我知道我可以手动执行此操作,但我希望能够像这样运行 SQL 更新查询:
Order.objects.all().update(address__name=F('name'))
但我无法使用 update 命令更新外键字段。任何关于 Django 或直接在 SQL 中的替代方案的建议 - 而不是仅仅写出以下内容 - 表示赞赏。
for order in Order.objects.all():
address = order.address
address.name = order.name
address.save()
【问题讨论】:
-
您的用例意味着对于一个地址模型将只有一个订单,反之亦然。在这种情况下,您不应该使用
OneToOneField吗?否则,您的用例没有意义,因为您最终可能会多次更新地址。还有为什么要存储重复数据?在这种情况下,名称不应该只出现在其中一个模型中吗? -
@AbdulAzizBarkat 是的,理想情况下该类将使用
OneToOneField,尽管在我目前的情况下它没有。另外,为了方便name字段的转移,两个型号上都有名字,之后可以去掉名字字段。
标签: python django postgresql