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,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)

这是我的模特。财产继承于地区,而销售继承于财产。我要做的是计算一个地区的销售数量和特定物业的销售数量。但是,我不知道哪种方法最好。我尝试将lambda用作使用count()函数的模型字段,但是我没有看到很多成功。如果您有任何建议,请告诉我。

yaobaoshun 回答:Django模型出现次数

如果您已经拥有了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

访问该属性 ,

您可以注释RegionProperty的查询集。例如:

from django.db.models import Count

regions = Region.objects.annotate(sales=Count('property__sale'))
properties = Property.objects.annotate(sales=Count('sale'))

由这些查询集产生的Region / Property s将具有一个额外的属性.sales,其中包含与相关的数量 Sale对象。

本文链接:https://www.f2er.com/3099578.html

大家都在问