2010-07-21 57 views
2

我有一个Review Model(如下面定义的那样)(我删除了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比较陌生,所以我可能会重新发明已经存在的功能。

回答

2

看文档后,我通过一本字典的ReviewForm实例化时:

f = ReviewForm(stats) 

这似乎工作得很好!如果任何人有更好的方式来做到这一点的任何建议,我都耳朵!

+0

这是正确的做法:http://docs.djangoproject.com/en/1.2/ref/forms/api/#bound-and-unbound-forms – ars 2010-07-21 02:33:51