我需要从用户那里捕获一些相当复杂的数据库更改,包括为多个模型更新和创建对象。
我觉得这样做的明显方法是利用大量Javascript创建一个JSON对象,其中包含可以以单一形式发布的所有必要更改。我并不热衷于这种方法,因为它阻止了我使用Django的CreateView
和UpdateView
类以及它们附带的验证。同样,我比Python更适应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)
我认为这种方法的好处是:
我看到的潜在缺点是:
使用这种方法是否有我没有预见到的缺点,或者我可以使用更好的方法?