我有一个模型,其中包含大量子字段,看起来应该是按顺序生成的:
class evaluation(models.Model):
factor1high = models.IntegerField(verbose_name="Factor 1 High Estimate")
factor1med = models.IntegerField(verbose_name="Factor 1 Mid. Estimate")
factor1low = models.IntegerField(verbose_name="Factor 1 Low Estimate")
factor1comment = models.TextField()
factor2high = models.IntegerField(verbose_name="Factor 2 High Estimate")
...
factor15mid = models.IntegerField(verbose_name="Factor 15 Mid. Estimate")
factor15low = models.IntegerField(verbose_name="Factor 15 Low Estimate")
factor15comment = models.textField()
我想做的是将其分为两类,类似于:
classs factor(models.Model):
high = models.IntegerField(verbose_name="High Estimate")
med = models.IntegerField(verbose_name="Mid. Estimate")
low = models.IntegerField(verbose_name="Low Estimate")
comment = models.TextField()
name = models.textField()
class evaluation(models.Model):
factors = [
factor(name = "Factor 1"),
factor(name = "Factor 2"),
...
factor(name = "Factor 15")
]
这当然不适用于Django。看起来这些方面的东西应该是可能的。
到目前为止,我已经尝试过了:
我想出的唯一选择就是手工创建所有字段,这会导致大量的重复工作,这似乎与Django的DRY原则背道而驰。我也非常希望将来能够在一个因素中添加其他参数,而无需一次为每个因素添加一个参数。
似乎应该有办法做到这一点,我一直无法找到它。
答案 0 :(得分:0)
您可以在创建评估时动态创建一定数量的因素:
class Evaluation(models.Model):
@classmethod
def create(cls, num_factors):
evaluation = cls()
evaluation.save()
for i in range(1, num_factors + 1):
factor(name='Factor: {}'.format(i), evaluation=evaluation)
答案 1 :(得分:0)
我提出的这个问题的最佳解决方案是创建一个自定义FactorField
,其中包含原始问题中提到的所有信息。这还允许选项关联自定义窗口小部件以便以有意义的方式显示数据。
我发现this webpage有助于创建自定义对象。