创建一个表示多个实例平均值的实例

时间:2010-07-21 02:16:19

标签: python django django-forms

我有一个类似下面定义的评论模型(我删除了REVIEW_FIELDS中的一堆字段)。我想找到属性子集的平均值,并用计算出的信息填充ModelForm。

REVIEW_FIELDS = ['noise']

class Review(models.Model):
  notes = models.TextField(null=True, blank=True)

  CHOICES = ((1, u'Quiet'), (2, u'Kinda Quiet'), (3, u'Loud'))
  noise = models.models.IntegerField('Noise Level', blank-True, null=True, choices=CHOICES)

class ReviewForm(ModelForm):

  class Meta:
    model = Review
    fields = REVIEW_FIELDS

我可以轻松地向模型添加更多字段,然后将它们添加到REVIEW_FIELDS列表中。然后我可以轻松地在javascript等中迭代它们。在我看来,我想计算一堆整数字段的平均值,并使用属性值填充ReviewForm。我怎么能这样做?

stats = {}
for attr in REVIEW_FIELDS:
  val = reviews.aggregate(Avg(attr)).values()[0]
  if val:
    stats[attr] = int(round(val,0))
    r.attr = stats[attr]
r = Review()
f = ReviewForm(r)

如何在不对属性值进行硬编码的情况下创建具有平均值的ReviewForm?我希望能够添加字段,将值添加到列表中,并将其自动添加到计算的统计集中。

如果我做了一些根本错误的事情,请告诉我。我对django比较新,所以我可能会重新发明已经存在的功能。

1 个答案:

答案 0 :(得分:2)

在查看文档后,我在实例化时将字典传递给ReviewForm:

f = ReviewForm(stats)

它似乎工作得很好!如果有人对更好的方法有任何建议,我全都听见了!