首页 > 解决方案 > 如何在 Django 中通过多个表单捕获复杂的数据库事务

问题描述

我需要从我的用户那里捕获一些相当复杂的数据库更改,包括为多个模型更新和创建对象。

我觉得这样做的明显方法是利用大量的 Javascript 来创建一个 JSON 对象,其中包含可以以单个表单发布的所有必要更改。我不喜欢这种方法,因为它阻止我使用 DjangoCreateViewUpdateView类,以及它们附带的验证。我也比 Javascript 更喜欢 Python。

我想使用一系列表单 POST 来随着时间的推移构建必要的更改,但还需要事务是原子的,据我所知,这在 Django 中是不可能的。另一个复杂之处是模型包含不可为空的字段,我需要在捕获填充它们所需的用户输入之前创建对象。我不想让这些字段为空或使用占位符,因为这会使验证变得更加困难。

我正在考虑的一种方法是创建每个必要模型的副本来存储部分对象。所有字段都可以为空,因此对象可以一次更新一点,直到所有表单都已发布。然后可以创建或更新原始(主)模型中的对象以匹配新(部分)模型中的对象,然后可以将其删除。

class Product(models.Model):
    field_a = models.CharField(max_length=255)
    field_b = models.PositiveIntegerField()

class PartialProduct(models.Model):
    field_a = models.CharField(max_length=255, blank=True, null=True)
    field_b = models.PositiveIntegerField(blank=True, null=True)

正如我所见,这种方法的好处是:

我可以看到的潜在缺点是:

使用这种方法是否有任何我没有预见到的缺点,或者我可以使用更好的方法吗?

标签: djangodjango-models

解决方案


推荐阅读