我需要一些想法来解决以下问题,也许可以采用某些设计模式或当前体系结构中的另一种方法。
我的应用程序的后端完全在Django框架中开发,并且有五个当前模型(无论它们之间的关系如何):
首先,我需要添加一个新模型,以上述方式的任何可能组合动态轻松地创建事务:
如您所见,我的交易模型有几个静态字段(年,月,金额),但其他字段取决于用例的随机定制。
我曾经考虑过类似Transaction(id,dynamic_field_1,dynamic_field_2,dynamic_field_3,year,amount)的方法,但是如何动态地进行呢?有某种设计模式或正确的方法可以做到这一点吗?
此外,我需要这些字段已经通过先前的模型进行了验证。例如:
交易(id,产品,客户,年,月,量):
我该怎么做?
谢谢!
答案 0 :(得分:0)
如果您可以在添加事务类型时修复源代码,那么我认为性能最好
您可以使用空值使每个可能的列都具有事务模型,并且在创建新事务时,可以验证有关所需字段的isNull。
class Transaction(models.Model):
transaction_id = models.AutoField(primary_key=True)
transaction_product = models.ForeignKey('Product', on_delete=models.CASCADE, blank=True, null=False)
transaction_customer = models.ForeignKey('Customer', on_delete=models.CASCADE, blank=True, null=False)
transaction_year = models.CharField(max_length=32, null=True, blank=True, db_index=True)
transaction_month = models.CharField(max_length=32, null=True, blank=True, db_index=True)
...
...
如果您需要在Web管理页面上添加交易类型
我认为您可以使TransactionExtra模型与Transaction有很多很多的关系。这样。
class Transaction(models.Model):
transaction_id = models.AutoField(primary_key=True)
transaction_extra = models.ManyToManyField('TransactionExtra', db_index=True)
class TransactionExtra(models.Model):
transaction_extra_id = models.AutoField(primary_key=True)
transaction_extra_name = models.CharField(max_length=32, index=True)
transaction_extra_value = models.CharField(max_length=512)