我使用的Django模型如下所示:
class FinancialAid(models.Model):
RECEIVED_EVERY = (("J", "Jours"),
("S", "Semaines"),
("M", "Mois"))
ID = models.AutoField(primary_key=True)
Name = models.CharField(max_length=100, null=True, blank=True)
Value = models.IntegerField(null=True, blank=True, default=-1)
ReceivedEvery = models.CharField(max_length=15, null=True, blank=True, choices=RECEIVED_EVERY)
Exchange = models.ForeignKey('Exchange', on_delete=models.CASCADE)
我可以访问我想要的信息,但我有一个问题,我经常在我的QuerySet中的Name
和ReceivedEvery
列上有重复项,但不总是在Value
上,从不在Exchange
上
假设我扩展了以下查询集:
financial_aid_qs = [
(ID=1, Name="Aid1", Value=100, ReceivedEvery="M", Exchange=Exchange.objects.get(pk=1)),
(ID=2, Name="Aid2", Value=200, ReceivedEvery="S", Exchange=Exchange.objects.get(pk=2)),
(ID=3, Name="Aid1", Value=150, ReceivedEvery="M", Exchange=Exchange.objects.get(pk=3)),
(ID=4, Name="Aid3", Value=100, ReceivedEvery="M", Exchange=Exchange.objects.get(pk=4))
]
如您所见,对于索引1和索引3,我有相同的Name
和ReceivedEvery
。我想做的是获得一个QuerySet(或者ValuesQuerySet,尽管我似乎记得它被删除了),它将包含所有不同的FinancialAid对象,并平均出具有相同Name
的FinancialAid对象的Value
。理想情况下,它会考虑到这样一个事实,即ReceivedEvery
可以不同,即使Name
是相同的(这都是一个平均值,因此不需要完美,这就是为什么一个月是30天或4周)
有了这些,结果应该是这样的:
financial_aid_qs = [
(Name="Aid1", Value=125, ReceivedEvery="M"),
(Name="Aid2", Value=200, ReceivedEvery="S"),
(Name="Aid3", Value=100, ReceivedEvery="M")
]
如您所见,对于Aid1
,该值已从100和150平均为125,而其他辅助工具尚未修改
使用^{} 对分组查询进行聚合,例如:
这将返回字典的查询集(在执行列表时):
如果您还想通过
ReceivedEvery
进行区分,那么您只需根据两个值进行分组:在这里,每周和每月的捐款将分开为同一个“名字”
使用conditional expression根据其他值创建新值:
相关问题 更多 >
编程相关推荐