首页 > 解决方案 > Django 模型出现次数

问题描述

我对 Django 还很陌生,我的模型需要帮助。

class Region(models.Model):
    region_name = models.CharField(max_length=10)
    def __str__(self):
        return self.region_name

class Property(models.Model):
    prop_name = models.CharField(max_length=200)
    region_name = models.ForeignKey(Region, on_delete=models.CASCADE, verbose_name="Region")
    prop_code = models.IntegerField(default=0, verbose_name="Property")
    def __str__(self):
        return self.prop_name

class Sale(models.Model):
    prop_name = models.ForeignKey(Property, on_delete=models.CASCADE)
    employee = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Person")
    prop_state = models.CharField(null=True, max_length=5, choices=[('new','New'),('used','Used')])
    date = models.DateField('Sale Date')
    def __str__(self):
        return '%s : %s %s - %s' % (self.prop_name.prop_name, self.employee, self.date, self.prop_state)

这是我的模型。Property 继承自 Region,Sale 继承自 property。我想要做的是计算一个地区的销售数量和特定房产的销售数量。但是,我不知道哪种方法是解决此问题的最佳方法。我尝试使用 lambda 作为使用 count() 函数的模型字段,但我看不到多少成功。如果您有任何建议,请告诉我。

标签: pythondjangodjango-modelscount

解决方案


如果你已经有你的 Property/Region 对象,这样的东西应该可以工作

sales_per_property = Sale.objects.filter(prop_name=property).count()
sales_per_region = Sale.objects.filter(prop_name__region_name=region).count()

编辑:

看到您尝试将 lambda 函数添​​加到模型字段,这可能是您正在寻找的更多内容。

class Region(models.Model):
    ...
    @property
    def sales(self):
        return Sale.objects.filter(prop_name__region_name=self).count()

财产也是如此。只需使用region.sales


推荐阅读