Django按产品类别计算平均价格

时间:2018-01-04 00:36:59

标签: python django

我有这个观点:

def MainStatsView(request):
    leads = Leads.objects.all()
    university = University.objects.all()
    price = Leads.objects.aggregate(Avg('price'))


    context = {
            'leads':leads,
            'university':university,
            'price':price,
            }

    return render(request,'stats/stats_main.html',context)

我试图获得在每所大学(类别)产生潜在客户的房产(产品)的平均价格。我很难找到基于大学的平均价格。我尝试使用for循环,但似乎没有做到这一点。

这也是我的循环:

{% for uni in university %}
    <tr>
        <td>{{ uni.u_name }}</td>
        <td>{{ price }}</td>
        <td>{{ lead.school }}</td>
        <td>{{ lead.featured }}</td>
        <td>{{ lead.price }}</td>
    </tr>
{% endfor %}

潜在客户模型:

class Leads(models.Model):
    listing = models.CharField(max_length=100,default='Listing')
    timestamp = models.DateTimeField(auto_now_add=True)
    company = models.CharField(max_length=50,default='Company')
    school = models.CharField(max_length=100,default='School')
    featured = models.BooleanField(default=False)
    price = models.IntegerField(blank=False,default=500)
    student_name = models.CharField(max_length=50,default='Name')
    student_phone = models.CharField(max_length=50,default='Phone')
    student_email = models.EmailField(max_length=100,default='none@studentcribz.com')
    party_size = models.IntegerField(max_length=1,default=1)

    def __str__(self):
        return self.school

大学模型:

class University(models.Model):
    u_date = models.DateTimeField(auto_now_add=True)
    u_name = models.CharField(max_length=100,blank=False)
    u_slug = models.CharField(max_length=100,blank=True)
    name_initials = models.CharField(max_length=5,blank=False)
    address = models.CharField(max_length=100,blank=False)
    color1 = models.CharField(max_length=7,blank=False)
    color2 = models.CharField(max_length=7,blank=False)
    color3 = models.CharField(max_length=7,blank=False)
    u_logo = models.ImageField(upload_to='university_logos',blank=False)
    banner = models.ImageField(upload_to='university_banners',blank=False)
    u_homepage_pic = models.ImageField(default='',upload_to='university_homepage_pic',blank=False)

    def __str__(self):
        return self.u_name

    def save(self, *args, **kwargs):
        self.u_slug = slugify(self.u_name)
        super(University, self).save(*args, **kwargs)

我在这里有一点点所以这就是为什么它看起来过于凌乱。这是结果的图像。它给了我平均所有产生线索的房产的价格而不是一个学校(这是我想要的)。

enter image description here

1 个答案:

答案 0 :(得分:1)

在Django中,您可以使用aggregate()在整个查询集上生成聚合,或使用annotate()为每个对象生成独立摘要。 Here is the documentation

在您的情况下,您似乎想要为每个大学对象注释平均lead__price

university = University.objects.all().annotate(Avg('lead__price'))

请注意,您可能需要调整lead__price引用,使其与您尚未提供的数据模型匹配。