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建议的两种解决方案。。不得不做一些调整,但我得到了我想要的。。对于总人口,我使用了注释方式;对于每个县的总人口,我使用了合计