Django-模型中两个独立实例的属性之间的数学运算

Django-模型中两个独立实例的属性之间的数学运算,django,django-models,Django,Django Models,这是我在这里的第一篇帖子。。所以如果我错过了什么或者做错了什么。。我很抱歉 我的模型 class state(models.Model): name = models.CharField(max_length =50, null= True) def __str__(self): return self.name class county(models.Model): name = models.CharField(max_length =50, null= True

这是我在这里的第一篇帖子。。所以如果我错过了什么或者做错了什么。。我很抱歉

我的模型

class state(models.Model):
   name = models.CharField(max_length =50, null= True)
   def __str__(self):
    return self.name

class county(models.Model):
   name = models.CharField(max_length =50, null= True)
   stateName = models.ForeignKey(state, null= True, on_delete = models.SET_NULL)
   def __str__(self):
    return self.name


class cityPopulation(models.Model):
   forCounty = models.ForeignKey(county, null= True, on_delete = models.SET_NULL)
   city1Popultaion = models.IntegerField(null =True, blank =True)
   city2Population = models.IntegerField(null =True, blank =True)
   def __str__(self):
    return self.forCounty.name + str("'s population data")

   @property
   def totalPoulation(self):
     total = int(self.city1Popultaion + self.city2Population)
     return total
这是我的问题

使用totalPouplation,我可以得到每个城市人口实例的总数

假设我们有两个州,两个县,分别有1号市和2号市

有没有一个简单的方法可以得到每个州所有县的总人口

任何帮助都会很好谢谢


我只是在学Django。。因此,我是一个非常初学者

您可以对
状态
对象进行注释:

from django.db.models import F, Sum

state.objects.annotate(
    population=Sum(F('country__citypopulation__city1Popultaion')+F('country__citypopulation__city2Population'))
)
由此查询集生成的
状态
对象将具有一个额外属性
.population
,该属性包含相关
城市
对象的相关
城市人口
对象的总和

请注意,您在
city1Population
字段中输入了一个错误,它应该是
city1Population
。此外,字段通常写在
snake\u case
中,因此通常将其写为
city1\u population

注意:通常情况下,Django模型就像Python中的所有类在PerlCase中都有一个名称,而不是snake\u case,因此它应该是:
State
,而不是
State

编辑:对于单个
状态
,您可以使用:

from django.db.models import F, Sum

class state(models.Model):
    name = models.CharField(max_length =50, null= True)

    def total_population(self):
        return self.county_set.aggregate(
            pop=Sum('citypopulation__city1Popultaion')+F('citypopulation__city2Population'))
        )['pop'] or 0

   def __str__(self):
       return self.name
从django.db.models导入F,求和
类状态(models.Model):
name=models.CharField(最大长度=50,null=True)
def总人口(自身):
返回self.country\u set.aggregate(
pop=总和(‘城市人口’)+F(‘城市人口’)
)['pop']或0
定义(自我):

返回self.name
您可以对
状态
对象进行注释:

from django.db.models import F, Sum

state.objects.annotate(
    population=Sum(F('country__citypopulation__city1Popultaion')+F('country__citypopulation__city2Population'))
)
由此查询集生成的
状态
对象将具有一个额外属性
.population
,该属性包含相关
城市
对象的相关
城市人口
对象的总和

请注意,您在
city1Population
字段中输入了一个错误,它应该是
city1Population
。此外,字段通常写在
snake\u case
中,因此通常将其写为
city1\u population

注意:通常情况下,Django模型就像Python中的所有类在PerlCase中都有一个名称,而不是snake\u case,因此它应该是:
State
,而不是
State

编辑:对于单个
状态
,您可以使用:

from django.db.models import F, Sum

class state(models.Model):
    name = models.CharField(max_length =50, null= True)

    def total_population(self):
        return self.county_set.aggregate(
            pop=Sum('citypopulation__city1Popultaion')+F('citypopulation__city2Population'))
        )['pop'] or 0

   def __str__(self):
       return self.name
从django.db.models导入F,求和
类状态(models.Model):
name=models.CharField(最大长度=50,null=True)
def总人口(自身):
返回self.country\u set.aggregate(
pop=总和(‘城市人口’)+F(‘城市人口’)
)['pop']或0
定义(自我):

返回self.name
感谢您的重播。。。很抱歉,如果我在第一篇文章中不清楚。。所以这将给我整个州的总数。。如果我想找到同一州两个县的总和怎么办。。每个县将有2个城市的总人口,但一个州有2个县。。有没有办法在一个标准中找到两个县的总计?谢谢你给我提供蛇的案子。。我一定会遵守的it@Parash:请参阅编辑:它将对相关县进行求和(因此,如果该州有两个县,它将对这两个县进行求和,如果有更多/更少,那么当然将对这些县进行求和)。感谢您的重播。。。很抱歉,如果我在第一篇文章中不清楚。。所以这将给我整个州的总数。。如果我想找到同一州两个县的总和怎么办。。每个县将有2个城市的总人口,但一个州有2个县。。有没有办法在一个标准中找到两个县的总计?谢谢你给我提供蛇的案子。。我一定会遵守的it@Parash:请参阅编辑:它将对相关县进行汇总(因此,如果该州有两个县,它将对这两个县进行汇总,如果有更多/更少,那么当然将对这些县进行汇总)。请提供您迄今为止尝试的内容以及您的解决方案的问题所在。如果你还没有尝试任何东西,你应该调查一下我尝试了@Willem Van Onsem建议的两种解决方案。。不得不做一些调整,但我得到了我想要的。。对于总人口,我使用了注释法。对于每个县的总人口,我使用了聚合法。请提供您迄今为止的尝试以及您的解决方案的问题所在。如果你还没有尝试任何东西,你应该调查一下我尝试了@Willem Van Onsem建议的两种解决方案。。不得不做一些调整,但我得到了我想要的。。对于总人口,我使用了注释方式;对于每个县的总人口,我使用了合计